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()
解决此问题“\\s*-\\s*”
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);
}
}