我知道如何用字符串中的另一个字符替换某个字符:
System.out.println(replaceAll(“你在哪儿?”,“?”,“”))
public static String replaceAll(String front, String pattern, String back){
if (front == null)
return "";
StringBuffer sb = new StringBuffer(); //A StringBuffer is created
int idx = -1;
int patIdx = 0;
while ((idx = front.indexOf(pattern, patIdx)) != -1)
{
sb.append(front.substring(patIdx, idx));
sb.append(back);
patIdx = idx + pattern.length();
}
sb.append(front.substring(patIdx));
return sb.toString();
}
此代码将用空格替换所有?
并打印出来(“你在哪里”)
现在我想知道的是如何替换超过1个字符。在Java中我可以使用简单的正则表达式,但如果在黑莓中我写了类似的东西:
System.out.println(replaceAll("Henry!! Where are you??", "!?", ""))
然后黑莓不接。那么我如何克服黑莓手机的这种限制呢?
答案 0 :(得分:4)
没有任何方法可以做到你想要的。但我可以建议你制作一个array of string of the pattern which you want to replace
。循环遍历字符串数组按字符串位置获取字符串并将其传递到
public static String replaceAll(String front, String pattern, String back)
。希望这会对你有所帮助。
答案 1 :(得分:2)
如果要替换String front
中使用的字符串pattern
中的任何字符,可以使用toCharArray()
,迭代模式中的所有字符,检查哪个字符首先要替换(哪个是最近的)并替换它。我的意思是这样的
public static String replaceAll(String front, String pattern, String back) {
if (front == null)
return "";
StringBuffer sb = new StringBuffer(); // A StringBuffer is created
int idx = -1;
int patIdx = 0;
boolean end = true;
int tmp = -1;
do {
end = true;
for (char c : pattern.toCharArray()) {
//System.out.println("searching for->"+c+" from patIdx="+patIdx+" idx="+idx);
if ((tmp = front.indexOf(c, patIdx)) != -1) {
//System.out.println("FOUND->"+c+" from patIdx="+patIdx+" idx="+idx+" tmp="+tmp);
if (idx == -1 || idx == patIdx-1 || (idx > patIdx && tmp < idx)){
end = false;
idx = tmp;
//System.out.println("setting replacement to ->"+c+" patIdx="+patIdx+" idx="+idx);
}
}
}
if (!end && idx != -1) {
//System.out.println("replacing patIdx="+patIdx+" idx="+idx);
sb.append(front.substring(patIdx, idx));
sb.append(back);
patIdx = idx+1;
}
//System.out.println("----");
}while(!end);
sb.append(front.substring(patIdx));
return sb.toString();
}