Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用split方法拆分字符串 用户可以通过在屏幕提示中键入位置来指定要导入的.txt文件的位置(该位置存储在使用键盘扫描仪填充的字符串“importFile”中)_Java_Split - Fatal编程技术网

Java 使用split方法拆分字符串 用户可以通过在屏幕提示中键入位置来指定要导入的.txt文件的位置(该位置存储在使用键盘扫描仪填充的字符串“importFile”中)

Java 使用split方法拆分字符串 用户可以通过在屏幕提示中键入位置来指定要导入的.txt文件的位置(该位置存储在使用键盘扫描仪填充的字符串“importFile”中),java,split,Java,Split,然后使用扫描仪“文件阅读器”扫描文件内容 String importFile = ""; File Fileobject = new File(importFile); Scanner fileReader = new Scanner(Fileobject); while(fileReader.hasNext()) { importFile = fileReader.next(); String [] splitText = importFile.split("[-\\s]

然后使用扫描仪“文件阅读器”扫描文件内容

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]);
}
但是,我遇到了一些问题,然后在文本文件中正确地分割数据

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

abcd - efgh - 12.34 - ijkl - mnop 
拆分后的文本格式应如下所示:

abcd
efgh
12.34
ijkl
mnop

我希望拆分后的文本存储在数组“splitText”中,例如“abcd”将位于splitText[0]等中。尽管整个字符串在拆分后仍被放入splitText[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,则可以使用):

输出

abcd
efgh
12.34
ijkl
mnop 


您的问题是多方面的:

  • 通过使用
    Scanner.next()
    ,您一次只能读取一个以空格分隔的字段,而希望逐行读取。请改用
    Scanner.nextLine()
    解决此问题

  • 正如@YCF\u L首先观察到的,您正在使用的分隔符regex不适合您的特定任务。您可以使用许多变体,但YCF\u L非常清楚并且切中要害:
    “\\s*-\\s*”

  • 拆分输入后,只打印第一个结果字段。您这样做可能是为了抵消问题(1)

  • 把它们放在一起,一个执行您想要的任务的读取循环可能看起来更像这样:

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

    我怀疑拆分工作正常,但您输出结果的方式(您没有显示)让您产生了相反的想法。如果您想要更自信的分析,请显示一个。@JohnBollinger Hi.是的。目前我使用的是“System.out.println([我要打印的内容])”,等等。我发现它似乎是将所有第一个字符串分组为splitText[0],而不是将整个字符串拆分为splitText[0]…[1]等等。这个答案似乎暗示问题出在OP的分隔符regex上,但我看不到它,而且这与OP报告的输出不一致。你和他们之间的关键区别可能在于你们都没有呈现的部分:产生输出的位。编辑。包括产生输出的部分输出。我以为问题出在正则表达式@JohnBollinger中,我已经编辑了我的答案,如果这是你的意思的话?你是对的,正则表达式是个问题,但它不是唯一的问题,我不会把它列为主要问题。好吧,这确实让它按我的要求打印出来:)-完美!但是,例如,如果我想打印“splitText[0]”中包含的值,则输出现在是字符串的第一部分,然后是字符串的第二部分三次。所以它看起来像:abcdefghefghefghefgh,但当然,若它是逐行打印出来的。splitText[0]中我唯一想要的是abcd,而不是下面的内容:)@dstlny,我的测试和对代码的直接阅读与您的后续声明不一致。在本答案中给出的代码中,使用问题中给出的示例输入,
    splitText[0]
    将接收值
    “abcd”
    splitText[1]
    “efgh”
    ,等等。。事实上,输出是正确的这一事实证明了这一点。我结束了循环,而只是将splitText[0]等的全部内容打印到一个表中,格式是我预先设置的。我发现字符串的每个第一部分都聚在了splitText[0]中,所有第二部分都聚在了splitText[1]中,等等。因此:()满足了我的需要。控制台中所有这些的输出如下所示:()@约翰伯林格
        while(fileReader.hasNext()) {
            String line = fileReader.nextLine();
            String[] splitText = line.split("\\s*-\\s*");
    
            for (String field : splitText) {
                System.out.println(field);
            }
        }