使用"替换Java字符串中的撇号。 \' "

时间:2018-04-22 19:42:01

标签: java weka

我目前正在开展一个项目,该项目涉及使用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语句是我试图逃避撇号的地方,但是当我打印出标题时,任何带有撇号的标题都保持不变。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

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

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

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

因此,要解决此问题,您需要使用set的{​​{1}}方法并分配新字符串。

List<T>

此外,您可以使用JDK-8中的headlines.set(i,headlines.get(i).replace("'", "\\'")); 方法简化替换逻辑:

replaceAll

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

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));

答案 1 :(得分:0)

我认为它不会像你一样取而代之。几天前我遇到了同样的问题。你必须指定它才能使它有用。

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

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

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

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

尝试这样它会对你有用。