我通常不会求助,但在这里我真的需要帮助 我有以下代码示例:
String text = "aa aab aa aab";
text = text.replace("aa", "--");
System.out.println(text);
Console output: -- --b -- --b
我有一个问题,我如何只替换 aab 包含的 aab 部分。
所以控制台输出是:
-- aab -- aab
我有另一个例子:
String text = "111111111 1";
text = text.replace("1", "-");
System.out.println(text);
Console output: --------- -
我只想替换一个角色,而不是所有被放在一起的角色 所以控制台输出是:
111111111 -
是否有针对此类情况的Java快捷方式?我无法弄明白,如何只替换字符串的特定部分。
任何帮助将不胜感激:)
答案 0 :(得分:1)
您可以将正则表达式与String.replaceAll(String, String)
一起使用。通过使用单词边界(\b
),类似
String[] texts = { "aa aab aa aab", "111111111 1" };
String[] toReplace = { "aa", "1" };
String[] toReplaceWith = { "--", "-" };
for (int i = 0; i < texts.length; i++) {
String text = texts[i];
text = text.replaceAll("\\b" + toReplace[i] + "\\b", toReplaceWith[i]);
System.out.println(text);
}
输出(根据要求)
-- aab -- aab
111111111 -
答案 1 :(得分:0)
您可以使用正则表达式
String text = "111111111 1";
text = text.replaceAll("1(?=[^1]*$)", "");
System.out.println(text);
说明:
String.replaceAll
与String.replace
相反的是一个正则表达式,需要更换(?=reg)
正则表达式的右边部分必须跟一个与正则表达式reg
匹配的字符串,但只捕获正确的部分[^1]*
表示从0到任意数量不同于'1'
$
表示已到达字符串的结尾简单来说,这意味着:请用空字符串替换所有'1'
字符后跟任意数量的不同于'1'
的字符,直到字符串结尾< / em>的
答案 2 :(得分:0)
我们可以使用Java中的StringTokenizer来实现任何类型输入的解决方案。以下是示例解决方案,
public class StringTokenizerExample {
/**
* @param args
*/
public static void main(String[] args) {
String input = "aa aab aa aab";
String output = "";
String replaceWord = "aa";
String replaceWith = "--";
StringTokenizer st = new StringTokenizer(input," ");
System.out.println("Before Replace: "+input);
while (st.hasMoreElements()) {
String word = st.nextElement().toString();
if(word.equals(replaceWord)){
word = replaceWith;
if(st.hasMoreElements()){
word = " "+word+" ";
}else{
word = " "+word;
}
}
output = output+word;
}
System.out.println("After Replace: "+output);
}