gpt4 book ai didi

java - 用 "\' 替换 Java 字符串中的撇号“

转载 作者:行者123 更新时间:2023-11-30 07:47:16 26 4
gpt4 key购买 nike

我目前正在进行一个项目,该项目涉及使用 Weka 根据犯罪类型对标题进行分类。由于 Weka 使用 .arff 文件,因此必须转义任何带有撇号的标题。

List<String> headlines = demoPipe.getHeadlines();
for (int i = 0; i < headlines.size(); i++) {

if(headlines.get(i).contains("'"))
headlines.get(i).replace("'", "\\'");

System.out.println(headlines.get(i));

//System.out.printf("'%s'%n", headline);
}

if 语句是我试图转义撇号的地方,但是当我打印出标题时,任何带有撇号的标题都保持不变。我该如何解决这个问题?

最佳答案

字符串是不可变的,这意味着对字符串的任何修改都会产生一个带有新修改的新字符串,并保持先前​​的字符串不变。

headlines.get(i).replace("'", "\\'");

以上replace操作返回一个带有新修改的新字符串对象,但您忽略了它。

因此,要解决这个问题,您需要使用 set List<T> 的方法并分配回新字符串。

headlines.set(i,headlines.get(i).replace("'", "\\'"));

此外,您可以使用 replaceAll 简化替换逻辑JDK-8 的方法:

headlines.replaceAll(s -> s.contains("'") ? s.replace("'", "\\'") : s);

如果出于某种原因,您不想修改源列表,那么您可以将结果收集到一个新列表中,如下所示:

List<String> result = 
headlines.stream()
.map(s -> s.contains("'") ? s.replace("'", "\\'") : s)
.collect(Collectors.toCollection(ArrayList::new));

或者你可以直接打印到控制台而不用构建一个新的列表:

headlines.stream()
.map(s -> s.contains("'") ? s.replace("'", "\\'") : s)
.forEach(System.out::println);

关于java - 用 "\' 替换 Java 字符串中的撇号“,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49970027/

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