替换String并检查String中的唯一性

时间:2015-06-23 20:48:05

标签: java string replace

我正在尝试用字符串替换空值的特定字符串。但是下面的代码片段并没有删除空格。还有一种简单的方法来查找使用字符串分隔我的分隔符的唯一性吗?

 String str = "||MGR||RAI MGR||PRE RAI MGR||PRE RAI SPR||PRE SPR||";
 String newStr = str.replaceAll("RAI", "");
 System.out.println("Updates String is::"+newStr);

我正在寻找的输出是|| MGR || PRE MGR || PRE SPR ||

由于

7 个答案:

答案 0 :(得分:1)

---编辑更新---

等一下,你在这里做了很多事情。您不仅要进行字符串替换,还要压缩||分隔符之间的字段,以便您没有具有相同内容的重复字段。

如果您只是剥离“RAI”,那么您将拥有

||MGR||MGR||PRE MGR||PRE SPR||PRE SPR||

首先,沿着||分隔符将所有字段拆分为字符串。然后剥去每个不需要的“RAI”字符串。将它们添加到Set<String>,然后从Set中的项目重建输入字符串。

---原帖如下---

你会得到一个包含两个空格的部分,使用你正在驾驶的技术,那是因为“PRE RAI MGR”将缩小为“PRE MGR”。

一个技巧是将“RAI”替换为“”,然后将“RAI”替换为“”,最后将“RAI”替换为“”

答案 1 :(得分:1)

尝试:

String newStr = str.replaceAll("RAI ", "").replaceAll(" RAI", "").replaceAll("RAI", "");

答案 2 :(得分:1)

replaceAll()正则表达式中包含空格,然后使用Java 8,您可以删除重复项。否则,你必须自己手动删除重复,这仍然是可能的,但为什么重新发明轮子(除了学习目的)。

public static void main(String[] args) throws Exception {
    String str = "||MGR||RAI MGR||PRE RAI MGR||PRE RAI SPR||PRE SPR||";
    // "RAI\\s?" means there may be a single space after "RAI"
    String newStr = str.replaceAll("RAI\\s?", "");
    System.out.println("Updates String is:: " + newStr);
    // Remove duplicates
    System.out.println("Duplicates Removed:: " + Arrays.stream(
            newStr.split("(?=\\|\\|)"))
                .distinct()
                .map(s -> (s))
                .collect(Collectors.joining()));
}

结果:

Updates String is:: ||MGR||MGR||PRE MGR||PRE SPR||PRE SPR||
Duplicates Removed:: ||MGR||PRE MGR||PRE SPR||

答案 3 :(得分:0)

String的

Current level = 2 ID = 3 Distance = 43 方法使用正则表达式,因此您可以传递一个并使用它来代替

replaceAll

[编辑] 您只需要删除尾随空格,以获得所需的输出。使用

String newStr = str.replaceAll("\\s?RAI\\s?", "");

完整代码:

String newStr = str.replaceAll("RAI\\s?", "");

答案 4 :(得分:0)

使用

String wordToReplace = "RAI";
String regex = "\\s*\\" + wordToReplace + "\\b\\s*";
str = str.replaceAll(regex, "");

答案 5 :(得分:0)

Replace字符串要省略“RAI”或“RAI”,split要检查值的唯一性,create新字符串带有唯一值。

String str = "||MGR||RAI MGR||PRE RAI MGR||PRE RAI SPR||PRE SPR";
String newStr = "||";
str = str.replaceAll("( |)RAI", "");
String[] values = str.split("\\|\\|");

//add only unique values to new string
for (int i = 1; i < values.length; i++) {
  if(!newStr.contains(values[i].trim())){
    newStr += values[i].trim() + "||"; 
  }
}
System.out.println("Updates String is::" + newStr);

答案 6 :(得分:0)

感谢您的所有投入。根据评论和建议,我设法使用下面的代码获得所需的输出

    String str = "||MGR||RAI MGR||PRE RAI MGR||PRE RAI SPR||PRE SPR||";
    String noDupBRole = "||";

    String newStr = str.replaceAll("RAI ", "").replaceAll(" RAI", "").replaceAll("RAI", "");
    System.out.println("New String is::"+newStr);
    Set<String> set = new LinkedHashSet<String>(Arrays.asList(newStr.split(Pattern.quote("||"))));

    for(String st : set) {
        if(st.isEmpty()) continue;
        noDupBRole += st+"||";
    }

    System.out.println("No Duplicate ::"+noDupBRole);