Java中的二维字符串搜索

时间:2015-12-09 05:57:38

标签: java arrays

这是我的代码:

import java.util.*;
import java.util.Arrays;

public class PhoneNumbers
{
  static Scanner scan = new Scanner(System.in);

  public static void main(String[] args)
  {
    String phoneList[][] =

    {
      {"Harrison, Rose: ", "James, Jean: ", "Smith, William: ", "Smith, Brad: "},

      {"415-555-2234", "415-555-9098", "415-555-1785", "415-555-9224"}
    };


    System.out.println(Arrays.deepToString(phoneList)); //this line is to make sure the 2D arrays work

    String input;

    System.out.print("Enter the first few letters of a last name to search for: ");
    input = scan.nextLine();

    int match = -1;

    for(int i = 0; i < phoneList.length; i++)
    {
      if(phoneList[i].indexOf(input))
      {
        System.out.println(phoneList[i]);
        match = i;
        break;
      }
      else
        System.out.println("There is no match.");
    }    


  }
}

我的目标是: 我有一个2D阵列,我在一个名字和另一个的电话号码。 我试图允许用户输入姓氏的前几个字母并进行搜索并显示匹配的搜索以及电话号码(这将是我的下一个挑战)。

谢谢,

4 个答案:

答案 0 :(得分:0)

这是你的答案:

 import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.util.Scanner;

public class Test {


    public static void main(String[] args) {
        int refNumber=-1;

        String phoneList[][] =

            {
              {"Harrison, Rose: ", "James, Jean: ", "Smith, William: ", "Smith, Brad: "},

              {"415-555-2234", "415-555-9098", "415-555-1785", "415-555-9224"}
            };


        Scanner scanner = new Scanner(System.in);
        System.out.print("Enter String to be searched ->");
        String input = scanner.nextLine();

        //System.out.println(input);

        for (int i=0; i<phoneList[0].length; i++) {
            if (phoneList[0][i].contains(input)) {
                refNumber = i;
            }
        }

        System.out.println("Name ->"+phoneList[0][refNumber]);
        System.out.println("Phone No ->"+phoneList[1][refNumber]);
    }
}

答案 1 :(得分:0)

为您拥有的所有名称创建字典(例如特里树)。在创建/更新搜索字典时,在每个节点上保留一个整数数组,该数组为您提供所有匹配名称的索引列表。当用户提供输入时,您可以在运行时继续优化结果,当他选择任何一个提供的建议时,您将获得它的索引。 休息很简单,使用该索引显示所选人员的电话号码。

答案 2 :(得分:0)

一种简单的方法是匹配输入字符串的开头:

for(int x=0; x<phoneList[1].length; x++)
    if(phoneList[0][x].toLowerCase().startsWith(input.toLowerCase()))
        System.out.println("Numbers which matched: " + phoneList[1][x]);

节目输出:

//Using "smith" as input:    
Numbers which matched: 415-555-1785
Numbers which matched: 415-555-9224

答案 3 :(得分:0)

我做了一些重构:

使用Map:name =&gt;电话

public static void main(String[] args)
  {
    String phoneList[][] =

    {
      {"Harrison, Rose: ", "James, Jean: ", "Smith, William: ", "Smith, Brad: "},

      {"415-555-2234", "415-555-9098", "415-555-1785", "415-555-9224"}
    };

    // Make a Map
    Map<String,String> mss=new HashMap<String,String>();
    for(int i = 0; i < phoneList.length; i++)
        mss.put(phoneList[0][i], phoneList[1][i]) ;

    String input;

    System.out.print("Enter the first few letters of a last name to search for: ");
    Scanner scan = new Scanner(System.in);

    input = scan.nextLine();

    String match="";

    for (String name: mss.keySet())
        if (name.startsWith(input))
            {
            System.out.println("NAME:"+name+ " PHONE:"+mss.get(name));
            match=name;
            break;
            }

    if (match.equals(""))
        System.out.println("There is no match.");
}