使用split方法拆分字符串

时间:2017-11-15 18:18:50

标签: java split

  1. 用户可以通过屏幕提示键入位置来指定他们要导入的.txt文件的位置(这是存储在String'importFile'中,使用键盘扫描程序填充)。
  2. 然后使用扫描仪'fileReader'扫描文件内容。

    String importFile = "";     
    File Fileobject = new File(importFile);
    Scanner fileReader = new Scanner(Fileobject);
    
    while(fileReader.hasNext()) 
    {
      importFile = fileReader.next();
      String [] splitText = importFile.split("[-\\s]");
      System.out.println(splitText[0]);
    }
    
  3. 但是,我遇到了一些麻烦,然后正确地分割文本文件中的数据......

    文本文件中的每一行文本格式如下:

    abcd - efgh - 12.34 - ijkl - mnop 
    

    文本应在拆分后按原样格式化:

    abcd
    efgh
    12.34
    ijkl
    mnop
    

    我希望文本在拆分后存储在数组'splitText'中,所以例如“abcd”将位于splitText [0]等内,尽管整个字符串被放入splitText [0 ]即使被拆分后 - 截图如下(here

2 个答案:

答案 0 :(得分:1)

您的问题是多方面的:

  1. 通过使用Scanner.next(),您一次读取一个空白分隔的字段文件,而您想逐行读取。请改为使用Scanner.nextLine()代替。

  2. 首先观察@YCF_L,您使用的分隔符正则表达式不适合您的特定任务。您可以使用许多变体,但YCF_L很清楚,并且要点:"\\s*-\\s*"

  3. 分割输入后,只打印第一个结果字段。据推测,你这样做是为了抵消问题(1)。

  4. 把这些放在一起,一个完成你想要的工作的读取循环可能看起来更像这样:

        while(fileReader.hasNext()) {
            String line = fileReader.nextLine();
            String[] splitText = line.split("\\s*-\\s*");
    
            for (String field : splitText) {
                System.out.println(field);
            }
        }
    

答案 1 :(得分:0)

而不是[-\s],您可以像\s*-\s*这样分开:

String [] splitText = importFile.split("\\s*-\\s*");
String result = String.join("\n", splitText);//Join the results
System.out.println(result);

或者只打印您可以使用的结果(如果您使用的是Java 8,则可以使用):

Stream.of(importFile.split("\\s*-\\s*")).forEach(System.out::println);

输出

abcd
efgh
12.34
ijkl
mnop 

ideone demo