【问题标题】:Separating elements in a string by white space into two dimensional array通过空格将字符串中的元素分隔为二维数组
【发布时间】:2023-03-18 23:00:02
【问题描述】:

我正在尝试将文件中的以下字符串存储到二维数组中。我写的代码除了当一个元素包含一个空格时,它会分成一个额外的元素。这是我的文件:

Student1    New York   
Student 2   Miami
Student3    Chicago

所以我希望我的输出看起来像这样:

[Student1] [New York]
[Student 2] [Miami]
[Student3] [Chicago]

这是我的实际输出:

[Student1] [New] [York]
[Student] [2] [Miami]
[Student3] [Chicago]

这是我目前所写的:

        String file= "file.txt";
        BufferedReader br = new BufferedReader(new FileReader(file));
        while ((file = br.readLine()) != null) {
            if (!file.isEmpty()) {
                String strSingleSpace = file.trim().replaceAll("\\s+", " "); 
                String[] obj = strSingleSpace.trim().split("\\s+");
                int i=0;
                String[][] newString = new String[obj.length][]; 

                for(String temp : obj){
                    newString[i++]=temp.trim().split("\\s+");
                }

                List<String[]> yourList = Arrays.asList(newString);
                System.out.println(yourList.get(0)[0] + " " + yourList.get(1)[0]);

【问题讨论】:

    标签: java arrays arraylist bufferedreader


    【解决方案1】:

    只是给您一些“深思熟虑”:您的代码以相同的方式处理所有行。好像他们看起来完全一样。尽管您已经非常清楚地表明,有些行具有不同格式。

    换句话说:如果有时空格属于第一列第二列,盲目地分割空格是没有意义的。

    改为:

    1. 确定一行中数字的最后一个索引 - 然后直到该索引的所有内容“构成第一列”。
    2. 该行的其余部分(最后一个数字之后)应该进入第二列;仅在剩余的字符串上调用 trim() 以消除潜在的前导空格。

    您也可以将所有这些放入一个匹配的正则表达式中;但这可能是某种家庭作业;我把这个练习留给读者。

    【讨论】:

      【解决方案2】:

      我认为对于您的特定测试用例,如果您更改此行,它将起作用:

      String[] obj = strSingleSpace.trim().split("\\s+");\
      

      对此:

      String[] obj = strSingleSpace.trim().split("\\s+", 1);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-27
        • 1970-01-01
        相关资源
        最近更新 更多