删除字符串中不需要的字符 Java
Delete unwanted chars in a String Java
我正在尝试编写一个将 String
作为输入的简单程序。如果 String
匹配 regex
表达式,则它被 returned。如果没有,我需要检查它,找到导致问题的每个字符并将其删除。
我 运行 遇到的问题是我使用的是基于 String
长度的 for loop
,但每次删除 char
,长度发生变化,因此缩短了 for 循环。当 for 循环完成一半时最终导致索引超出范围错误。
输入
“09fdghdghh0”-(应该 return '090')
public String cleanID(String id){
System.out.println("id = " + id);
//String strRegex = "[a-zA-Z]+";
String numRegex = "[0-9]+";
StringBuilder sb = new StringBuilder(id);
System.out.println(sb.toString());
if(id.matches(numRegex)){
return sb.toString();
}else{
for(int i = 0; i < id.length(); i++){
System.out.println("sb length = " + sb.length());
if(!Character.toString(sb.charAt(i)).matches(numRegex)){
System.out.println(sb.charAt(i));
sb.deleteCharAt(i);
}
}
}
return sb.toString();
输出
sb length = 11
sb length = 11
sb length = 11
f
sb length = 10
g
sb length = 9
d
sb length = 8
h
sb length = 7
sb length = 7
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 7
如您所见,循环中途失败。除了 for 循环之外,还有更好的方法吗?或者我只是遗漏了一些明显的东西?
谢谢。
我会使用带有负正则表达式的 replaceAll
,然后与原来的进行比较。
例如:
String text = "10";
System.out.println(text.replaceAll("[^0-9]", " ").equals(text));
我认为最好的办法是使用模式和匹配器 类
//Regex goes here
Pattern p = Pattern.compile("[0-9]+");
//Your string goes here
Matcher m = p.matcher(id);
if (m.find()) {
System.out.println(m.group(1));
}
这应该会提取您想要的任何文本。
像这样的正则表达式会有所帮助:
public static void main(String[] args) {
String s = "09fdghdghh0";
System.out.println(s.replaceAll("\D", "")); // \D removes everything which is not a number
}
O/P
090
另一种方法是遍历整个字符串,然后将正确的值(而不是删除错误的值)添加到 resultString
我正在尝试编写一个将 String
作为输入的简单程序。如果 String
匹配 regex
表达式,则它被 returned。如果没有,我需要检查它,找到导致问题的每个字符并将其删除。
我 运行 遇到的问题是我使用的是基于 String
长度的 for loop
,但每次删除 char
,长度发生变化,因此缩短了 for 循环。当 for 循环完成一半时最终导致索引超出范围错误。
输入 “09fdghdghh0”-(应该 return '090')
public String cleanID(String id){
System.out.println("id = " + id);
//String strRegex = "[a-zA-Z]+";
String numRegex = "[0-9]+";
StringBuilder sb = new StringBuilder(id);
System.out.println(sb.toString());
if(id.matches(numRegex)){
return sb.toString();
}else{
for(int i = 0; i < id.length(); i++){
System.out.println("sb length = " + sb.length());
if(!Character.toString(sb.charAt(i)).matches(numRegex)){
System.out.println(sb.charAt(i));
sb.deleteCharAt(i);
}
}
}
return sb.toString();
输出
sb length = 11
sb length = 11
sb length = 11
f
sb length = 10
g
sb length = 9
d
sb length = 8
h
sb length = 7
sb length = 7
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 7
如您所见,循环中途失败。除了 for 循环之外,还有更好的方法吗?或者我只是遗漏了一些明显的东西?
谢谢。
我会使用带有负正则表达式的 replaceAll
,然后与原来的进行比较。
例如:
String text = "10";
System.out.println(text.replaceAll("[^0-9]", " ").equals(text));
我认为最好的办法是使用模式和匹配器 类
//Regex goes here
Pattern p = Pattern.compile("[0-9]+");
//Your string goes here
Matcher m = p.matcher(id);
if (m.find()) {
System.out.println(m.group(1));
}
这应该会提取您想要的任何文本。
像这样的正则表达式会有所帮助:
public static void main(String[] args) {
String s = "09fdghdghh0";
System.out.println(s.replaceAll("\D", "")); // \D removes everything which is not a number
}
O/P
090
另一种方法是遍历整个字符串,然后将正确的值(而不是删除错误的值)添加到 resultString