我正在尝试用字符串替换空值的特定字符串。但是下面的代码片段并没有删除空格。还有一种简单的方法来查找使用字符串分隔我的分隔符的唯一性吗?
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 ||
由于
答案 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)
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);