我有一个字符串*dfgi*kjklx
。我想删除*之前和之后的字符,输出应该是
fgjklx
我已经编写了这样的代码,但它显示索引超出范围错误。
String t = "*dfgi*kjklx";
for(int i = 0; i < s.length(); i++)
{
String temp = s.charAt(i);
if(temp == ‘*’)
{
t = t.replace(s.charAt(i), '');
t = t.replace(s.charAt(i-1), '');
t = t.replace(s.charAt(i+1), '');
System.out.println("String: " + t);
}
}
答案 0 :(得分:8)
你可以使用这样的正则表达式:
public static void main(String[] args) throws Exception {
String s = "*dfgi*kjklx";
System.out.println(s.replaceAll("\\w?\\*\\w?", "")); // replace 0 or 1 [a-zA-Z0-9] * 0 or 1 [a-zA-Z0-9].
}
O / P:
fgjklx
编辑:就像Andy在评论中所说的那样,您可以使用.
代替\\w
来删除“*”之后或之前的“任何内容”。
答案 1 :(得分:1)
我可以用StringBuilder
:
StringBuilder sb = new StringBuilder(t.length());
for (int i = 0; i < t.length(); ++i) {
if (t.charAt(i) != '*' // Check the current character.
&& (i == 0 || t.charAt(i - 1) != '*') // Check the prev character.
&& (i + 1 >= t.length() || t.charAt(i + 1) != '*')) { // Check the next.
sb.append(t.charAt(i));
}
}
t = sb.toString();