1

我需要解析这种输入:

  • 第一行:包含一个 int 值n ( 1 <= n <= 26 ),表示下面定义的符号数
  • n行格式与示例类似,括号中的值只能是 0、1、....、9,由空格分隔。第一个符号是一个字符( A, ... , Z)。

每个符号 (AZ) 定义一个集合,其中包含相关行中的所有值。{ }表示一个空集。没有一个符号可以重复。

输入示例:

3
Z = { 5 6 2 }
X = { 2 5 7 }
Y = { 2 4 3 0 }

或者

2
X = { 7 }
Y = { }

我必须存储这些集合并通过相关符号识别它们。为了达到我的目标,我使用了一个Map存储 < set_id, set_values> 对的java,其中每个符号都是set_id地图的键。

HashMap<Character, List<Integer>> sets = new HashMap<Character, List<Integer>>();

这是其余的代码。我希望有人能给我一些建议,以找到另一种方法并改善表现。

    BufferedReader r =
            new BufferedReader (new InputStreamReader(System.in));
    String line = null;

    /* Stores couple <Set_id, Set_values> */
    HashMap<Character, List<Integer>> sets = new HashMap<Character, List<Integer>>();

    /* number of sets, first line parsed */
    int n_sets = Integer.parseInt(r.readLine());

    Character set_id = null;
    Character current = null;
    List<Integer> set_values = null;

    System.out.println("DEBUG: Will perform "+n_sets+" iteration");
    while(n_sets != 0){
        set_values = new ArrayList<Integer>();
        line = r.readLine();
        set_id = new Character(line.charAt(0));

        /* Set input example : Z = { 5 6 2 } */
        for(int i=0; i<line.length(); i++){
            current = line.charAt(i);
            /* Fill values list for current set */
            if(Character.isDigit(current))
                set_values.add(Integer.parseInt(current.toString()));
        }

        /*Put current <set_id, set_values> into map */
        sets.put(set_id, set_values);
        -- n_sets;
    }
4

1 回答 1

1

尝试使用 split() 来消除必须处理空格(无论如何它总是不符合您的标准)

    String[] splitLine = line.split(" ");
    for(int i=0; i<splitLine.length; i++){
                if (Character.isDigit(splitLine[i].charAt(0)))
                   set_values.add(Integer.parseInt(current.toString()));
            }
于 2013-11-04T17:34:40.683 回答