【问题标题】:Split string in Txt files在 Txt 文件中拆分字符串
【发布时间】:2018-04-10 10:23:26
【问题描述】:

假设我有一个名为 "Keys.txt" 的 txt 文件:

Keys.txt:
Test 1
Test1 2
Test3 3

我想将字符串拆分成一个数组,但我不知道该怎么做 我希望结果是 在这样的数组中:

Test
1
Test1
2
Test2
3

我有这个启动代码:

FileReader fr = new FileReader("Keys.txt");
    BufferedReader br = new BufferedReader(fr);
    String str = br.readLine();
    br.close();
    System.out.println(str);

【问题讨论】:

  • 你的意思是用空格分割吗str.split("\\s")
  • 首先,能够读取文件,而不仅仅是第一行。然后你只需要使用String.split。你可以在这里和那里找到很多例子。
  • 我想读取所有文件然后拆分字符串

标签: java split bufferedreader filereader


【解决方案1】:

您可以将所有行存储在一个字符串中,用空格分隔,然后将其拆分为所需的数组。

FileReader fr = new FileReader("Keys.txt");
BufferedReader br = new BufferedReader(fr);
String str="", l="";
while((l=br.readLine())!=null) { //read lines until EOF
    str += " " + l;
}
br.close();
System.out.println(str); // str would be like " Text 1 Text 2 Text 3"
String[] array = str.trim().split(" "); //splits by whitespace, omiting 
// the first one (trimming it) to not have an empty string member

【讨论】:

    【解决方案2】:

    您可以按照以下步骤操作:

    • 读取字符串中的当前行,然后在空白处拆分字符串(一个或多个),您就有了一个可以将元素存储在列表中的数组。
    • 对每一行重复该操作。
    • 将列表转换为数组(List.toArray())。

    例如:

    List<String> list = new ArrayList<>();
    try (BufferedReader br = new BufferedReader(new FileReader("Keys.txt"))) {
    
        String str;
        while ((str = br.readLine()) != null) {
            String[] token = str.split("\\s+");
            list.add(token[0]);
            list.add(token[1]);
        }
    
    }
    String[] array = list.toArray(new String[list.size()]);
    

    请注意,通过使用 Java 8 流和 java.nio API(可从 Java 7 获得),您可以更简洁:

    String[] array = Files.lines(Paths.get("Keys.txt"))
                          .flatMap(s -> Arrays.stream(s.split("\\s+"))
                                              .collect(Collectors.toList())
                                              .stream())
                          .toArray(s -> new String[s]);
    

    【讨论】:

    • 当我创建列表时,它向我展示了这个问题:列表类型不是通用的;它不能用参数 参数化
    • 检查导入。应该是 import java.util.List;
    【解决方案3】:
    String str = "Test 1 Test1 2 Test2 3";
    String[] splited = str.split("\\s+");
    

    【讨论】:

      【解决方案4】:

      您可以使用String.split() 方法(在您的情况下是str.split("\\s+");)。

      它将输入字符串拆分为一个或多个空白字符。正如 Java API 文档所述 here:

      \s - 空格字符:[ \t\n\x0B\f\r]

      X+ - X,一次或多次。

      【讨论】:

        【解决方案5】:
            FileReader fr;
            String temp = null;
            List<String> wordsList = new ArrayList<>();
            try {
                fr = new FileReader("D://Keys.txt");
        
                BufferedReader br = new BufferedReader(fr);
                while ((temp = br.readLine()) != null) {
                    String[] words = temp.split("\\s+");
                    for (int i = 0; i < words.length; i++) {
                        wordsList.add(words[i]);
                        System.out.println(words[i]);
                    }
                }
                String[] words = wordsList.toArray(new String[wordsList.size()]);
                br.close();
        
            } catch (Exception e) {
                e.printStackTrace();
            }
        

        试试这个

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-05-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多