我有一个名为lol.txt的文件,其中包含以下文字:
10000002$11-beta-hydroxylase deficiency$$10010331$$$$$$$$
10000005$17 ketosteroids urine$$10022891$$$$$$$$
10000007$17 ketosteroids urine decreased$$10022891$$$$$$$$
10000009$17 ketosteroids urine increased$$10022891$$$$$$$$
10000011$17 ketosteroids urine normal$$10022891$$$$$$$$
10000013$17,20-desmolase deficiency$$10010331$$$$$$$$
我正在编写一个将提取文件内容的java程序。预期产出如下:
beta-hydroxylase deficiency
ketosteroids urine
ketosteroids urine decreased
.
.
我的代码:
public class TextSplitter {
public static void main(String[] args) throws FileNotFoundException {
Scanner read = new Scanner (new File("lol.txt"));
read.useDelimiter("$");
String var1, var2, var3, var4, var5, var6, var7, var8, var9, var10, var11;
while (read.hasNext())
{
var1 = read.next();
var2 = read.next();
var3 = read.next();
var4 = read.next();
var5 = read.next();
var6 = read.next();
var7 = read.next();
var8 = read.next();
var9 = read.next();
var10 = read.next();
var11 = read.next();
System.out.println("" + var2);
}
read.close();
}
}
错误是:
Exception in thread "main" java.util.NoSuchElementException
答案 0 :(得分:2)
该方法接受正则表达式,而不是字符串。 $
在正则表达式中有特殊含义,你应引用它来将其视为 String “$”,你有两个选择:
使用\
转义特殊字符(在Java \
中表示为\\
):
read.useDelimiter("\\$");
使用Pattern#quote
为您执行此操作:
read.useDelimiter(Pattern.quote("$"));
我强烈建议您阅读有关循环和Java的内容,它会让您的生活更轻松。浏览basic tutorial以获取更多解释。
答案 1 :(得分:0)
我建议逐行读取输入,然后解析行(例如,使用String.split
)。同时将结果存储到ArrayList
,而不是单个变量:
List<String> results = new ArrayList<>();
while(read.hasNext()) {
results.add(read.nextLine().split("\\$", 3)[1]);
}
System.out.println(results);
在这里,我们将每个输入行分成由'$'
分隔的片段,然后取出片段#1(编号从零开始)。
如果您不想存储结果,只需将它们打印到标准输出,请使用
while(read.hasNext()) {
System.out.println(read.nextLine().split("\\$", 3)[1]);
}