确保字符串是“aaaa123243”这样类型的,绝对不会是“aaa1234123abc”这样类型的。public class Test { public static void main(String[] args) { String str="abc123a"; String s = str.replaceAll("[^a-zA-Z].+$", ""); System.out.println(s);
System.out.println(findLetter(str)); }
public static String findLetter(String str) { if(str == null || str.length() == 0) { return str; } char[] chs = str.toCharArray(); int k = 0; for(int i = 0; i < chs.length; i++) { if(!isAsciiLetter(chs[i])) { break; } k++; } return new String(chs, 0, k); } }说实在的,很不想回复的,题目不是很明确,也未完全肯定前面都是字母,后面都是非字母。
private static boolean isAsciiLetter(char c) { return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'); }少贴一个方法
正则表达式方法那个把 .+ 改成 .*String s = str.replaceAll("[^a-zA-Z].*$", "");如果字符串中还有换行符的话,要改成这样:String s = str.replaceAll("(?s)[^a-zA-Z].*$", "");如果题目要求不明确,用正则表达式能有一万种写法!
这个方法中的 private static boolean isAsciiLetter(char c) { return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'); } ------- 存在这个&& 无法编译啊
我的方法:计算第一个数字的位置,然后截串。private static String getEndLetter(String s) { for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); if(c >= 49 && c <= 58) { return s.substring(i); } } return ""; }输入串只能是aaabb11234,这样的格式aa214ad会截取错误,方法没有做校验。 要校验的话,使用楼上他们的正则吧
public class Test { public static void main(String args[]) { String str = "abc124";
for(int i = 0; i < str.length(); i ++) { char c = str.charAt(i); if(c >= '0' && c <= '9') { String newStr = str.substring(0, i); System.out.println(newStr); break; } } } } 楼主自己测试下,可以请给分,谢谢!
public static void main(String[] a){ String s = "abc123abc456ab1c235"; String s1 = "abc123"; Pattern p = Pattern.compile("([\\w&&[\\D]]+)([\\d]+)"); Matcher m = p.matcher(s); if (m.matches()) System.out.println(s + " :" + m.group(2)); m = p.matcher(s1); if (m.matches()) System.out.println(s1+" "+m.group(2)); }
str.replaceAll("[0-9]", "").trim();
public class Test {public static void main(String args[]) { String str = "abssssssssssssssssssssc1241111111111111111111111111111aa"; String s=str.replaceAll("\\d", "").trim(); System.out.println(s); } } 楼主 这个试试。
String str="abc123";
String trim = str.replaceAll("\\d", "").trim();
2,数字在后
3,不存在数字和字母交叉的情况遍历从0到9,在该str里的最前面位置,并保存在数组arr[]里。对比arr[]里最小的值,得到int mix然后截取str的下标mix到末尾的字符串。给分吧?
String str="abc123a";
String s = str.replaceAll("[^a-zA-Z].+$", "");
System.out.println(s);
System.out.println(findLetter(str));
}
public static String findLetter(String str) {
if(str == null || str.length() == 0) {
return str;
}
char[] chs = str.toCharArray();
int k = 0;
for(int i = 0; i < chs.length; i++) {
if(!isAsciiLetter(chs[i])) {
break;
}
k++;
}
return new String(chs, 0, k);
}
}说实在的,很不想回复的,题目不是很明确,也未完全肯定前面都是字母,后面都是非字母。
return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');
}少贴一个方法
private static boolean isAsciiLetter(char c) {
return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');
}
-------
存在这个&&
无法编译啊
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if(c >= 49 && c <= 58) {
return s.substring(i);
}
}
return "";
}输入串只能是aaabb11234,这样的格式aa214ad会截取错误,方法没有做校验。
要校验的话,使用楼上他们的正则吧
String str = "abc124";
for(int i = 0; i < str.length(); i ++) {
char c = str.charAt(i);
if(c >= '0' && c <= '9') {
String newStr = str.substring(0, i);
System.out.println(newStr);
break;
}
}
}
}
楼主自己测试下,可以请给分,谢谢!
String s = "abc123abc456ab1c235";
String s1 = "abc123";
Pattern p = Pattern.compile("([\\w&&[\\D]]+)([\\d]+)");
Matcher m = p.matcher(s);
if (m.matches())
System.out.println(s + " :" + m.group(2));
m = p.matcher(s1);
if (m.matches())
System.out.println(s1+" "+m.group(2));
}
String str = "abssssssssssssssssssssc1241111111111111111111111111111aa";
String s=str.replaceAll("\\d", "").trim();
System.out.println(s);
}
}
楼主
这个试试。