gpt4 book ai didi

java - 如何阻止replaceAll在循环中不断替换

转载 作者:行者123 更新时间:2023-12-01 12:44:13 25 4
gpt4 key购买 nike

我想要做的是查看包含中文单词列表和单个字符的文本文件,首先替换任何单词,然后替换任何单个字符

我的问题是我使用的replaceAll似乎是连续替换已经被替换的字符。

例如,如果我输入:重水,它将输出cung5 seoi2

但是如果我输入重水重,它会将前两个字符作为一个单词,然后将最后的单个字符输出cung5 seoi2 cung4

我的数据库文件如下所示:

重水,cung5 seoi2

重,cung4

水,seoi2

代码片段

String output = null;

Scanner in = new Scanner(System.in);

System.out.println("Enter Chinese: ");
String input = in.nextLine();

BufferedReader br = null;

String sCurrentLine;

br = new BufferedReader(new FileReader("C:\\database.txt"));

while ((sCurrentLine = br.readLine()) != null) {

String[] lineValues = sCurrentLine.split(",");
if(input.contains(lineValues[0])) {
input = input.replaceAll(lineValues[0], lineValues[1]+" ");
}
}

output = input;

System.out.println(output);

示例 session

输入>重水水

输出>重水水

预期输出> cung5 seoi2 seoi2

最佳答案

我已经运行了这段代码,它只是你的代码的清理版本:

final Scanner in = new Scanner(System.in);
System.out.println("Enter Chinese: ");
String input = in.nextLine();
BufferedReader br = new BufferedReader(new FileReader("database.txt"));
for (String sCurrentLine; (sCurrentLine = br.readLine()) != null;) {
final String[] lineValues = sCurrentLine.split(",");
input = input.replace(lineValues[0], lineValues[1]+" ");
}
System.out.println(input);

我尝试的两个 session 如下:

Enter Chinese: 
重水重
cung5 seoi2 cung4

Enter Chinese:
重水水
cung5 seoi2 seoi2

结论:该程序按要求运行。

<小时/>

顺便说一句,这是使用 Java 8 Streams 重写它的方法:

System.out.println("Enter Chinese: ");
final String input = new Scanner(System.in).nextLine();
final String result = new BufferedReader(new FileReader("database.txt")).lines()
.map(line->line.split(","))
.reduce(input, (acc, lineValues) -> acc.replace(lineValues[0], lineValues[1]+" "));
System.out.println(result);

关于java - 如何阻止replaceAll在循环中不断替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24841563/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com