public static void print(String s) { boolean hasDigit = false; StringBuffer sb = new StringBuffer(s); StringBuffer result = new StringBuffer(); for (int i = sb.length() - 1; i >= 0; i--) { if (Character.isDigit(sb.charAt(i))) { result.insert(0, sb.charAt(i)); hasDigit = true; } else if (hasDigit) break; } System.out.println (result); } }
//这样就可以了啊 public class TestEnd { public static void main(String[] args) { String s="afsafa2as3434f3434dafsdf4"; String[] result=s.split("[^\\d+]");//按非数字拆分字符串 System.out.println(result[result.length-1]); } }
//这样就可以了 public class TestEnd { public static void main(String[] args) { String s="afsafa2as3434f3434dafsdf4"; String[] result=s.split("[^\\d+]");//按非数字拆分字符串 System.out.println(result[result.length-1]); } }
public static int method(String str) { if (null == str) return -1; final Pattern p = Pattern.compile("(\\d+)\\D*$"); Matcher matcher = p.matcher(str); if (!matcher.find()) return -1; // 找不到数字 return Integer.parseInt(matcher.group(1)); }
我想的方法是用StringBuffer的reverse()逆序后,遍历判断输出。
有了这么多好办法,我写一个土一点的: public class StringLast { public static void main(String[] args) { String str = "111"; int count = 0;
for (int i=str.length()-1; i>=0; i--){ char c = str.charAt(i); if (c >= '0' && c <= '9'){ count ++; } if (count == 0 && i == 0) System.out.printf("There is no Number char in \"%s\".", str); //应付没有数字的字符串
if (count != 0){ if (c < '0' || c > '9'){ System.out.print(str.substring(i+1, i+count+1)); //应付结尾或者中间有数字的字符串 return; } else if (i == 0){ if (count == str.length()){ System.out.print(str); //应付全是数字的字符串 return; } else{ System.out.print(str.substring(0, count)); //应付只有开始几个是数字的字符串 return; } } } } } }
我也来一个: import java.util.regex.*; public class MyRegex2 { public static void main(String[] args) { String s="adfjsdl3434adfjl;afds234fasdf3344adsf"; Matcher m=Pattern.compile(".*\\D+(\\d+)\\D*$").matcher(s); if(m.find()){ System.out.println(m.group(1)); } } }
刚才又想了下如果碰到"sdfsdf234sdf"上面的好像不行如果全部都是数字的话那就应该输出本身: 改了下: import java.util.regex.*; public class MyRegex2 { public static void main(String[] args) { String s="sdf234234334444dfdd23f"; Matcher m=Pattern.compile("\\D*(\\d+)\\D*$").matcher(s); if(m.find()){ System.out.println(m.group(1)); } } }
public class TestEnd { public static void main(String[] args) { String s="afsafa2as3434f3434dafsdf4"; String[] result=s.split("[^\\d+]");//按非数字拆分字符串 System.out.println(result[result.length-1]); } } 这个就不错
String str = "fgiufg134yg3u4gr1g3rg14r"; Pattern p = Pattern.compile("\\d+");
Matcher m = p.matcher(str); int start = 0, end = 0;
while (m.find(end)) {
start = m.start();
end = m.end();
} System.out.println(str.substring(start, end));
}可能有更简便的方法吧。
public static void main(String[] args) throws Exception {
print("afsafa2as3434f3434dafsdf4");
print("adfjsdl3434adfjl;afds234fasdf3344adsf");
}
public static void print(String s) {
boolean hasDigit = false;
StringBuffer sb = new StringBuffer(s);
StringBuffer result = new StringBuffer();
for (int i = sb.length() - 1; i >= 0; i--) {
if (Character.isDigit(sb.charAt(i))) {
result.insert(0, sb.charAt(i));
hasDigit = true;
}
else if (hasDigit) break;
}
System.out.println (result);
}
}
public class TestEnd {
public static void main(String[] args) {
String s="afsafa2as3434f3434dafsdf4";
String[] result=s.split("[^\\d+]");//按非数字拆分字符串
System.out.println(result[result.length-1]);
}
}
public class TestEnd {
public static void main(String[] args) {
String s="afsafa2as3434f3434dafsdf4";
String[] result=s.split("[^\\d+]");//按非数字拆分字符串
System.out.println(result[result.length-1]);
}
}
public static int method(String str) {
if (null == str) return -1;
final Pattern p = Pattern.compile("(\\d+)\\D*$");
Matcher matcher = p.matcher(str);
if (!matcher.find()) return -1; // 找不到数字
return Integer.parseInt(matcher.group(1));
}
public class StringLast {
public static void main(String[] args) {
String str = "111";
int count = 0;
for (int i=str.length()-1; i>=0; i--){
char c = str.charAt(i); if (c >= '0' && c <= '9'){
count ++;
}
if (count == 0 && i == 0)
System.out.printf("There is no Number char in \"%s\".", str); //应付没有数字的字符串
if (count != 0){
if (c < '0' || c > '9'){
System.out.print(str.substring(i+1, i+count+1)); //应付结尾或者中间有数字的字符串
return;
}
else if (i == 0){
if (count == str.length()){
System.out.print(str); //应付全是数字的字符串
return;
}
else{
System.out.print(str.substring(0, count)); //应付只有开始几个是数字的字符串
return;
}
}
}
}
}
}
import java.util.regex.*;
public class MyRegex2 {
public static void main(String[] args) {
String s="adfjsdl3434adfjl;afds234fasdf3344adsf";
Matcher m=Pattern.compile(".*\\D+(\\d+)\\D*$").matcher(s);
if(m.find()){
System.out.println(m.group(1));
}
}
}
改了下:
import java.util.regex.*;
public class MyRegex2 {
public static void main(String[] args) {
String s="sdf234234334444dfdd23f";
Matcher m=Pattern.compile("\\D*(\\d+)\\D*$").matcher(s);
if(m.find()){
System.out.println(m.group(1));
}
}
}
public static void main(String[] args) {
String s="afsafa2as3434f3434dafsdf4";
String[] result=s.split("[^\\d+]");//按非数字拆分字符串
System.out.println(result[result.length-1]);
}
}
这个就不错
{
Pattern p=Pattern.compile(".*?(\\d+)[^\\d]*$");
Matcher m=p.matcher(s);
return m.find()?m.group(1):null;
}
public static void main(String[] args) {
String str = "adfjsdl3434adfjl;afds234fasdf3344adsf";
System.out.println(getLastNumber(str));
} public static String getLastNumber(String str) {
if(str == null || str.length() == 0) {
return null;
}
char[] chs = str.toCharArray();
int offset = 0;
boolean isNonNumberStart = false;
for(int i = 0; i < chs.length; i++) {
if(!isNumber(chs[i])) {
isNonNumberStart = true;
continue;
}
if(isNonNumberStart) {
isNonNumberStart = false;
offset = 0;
}
chs[offset++] = chs[i];
}
return new String(chs, 0, offset);
}
private static boolean isNumber(char c) {
return (c >= '0') && (c <= '9');
}
}
"^.*?(?<!\\d)(\\d+)(?!\\d+).*$"
匹配最后一个出现的数字
"^.*(?<!\\d)(\\d+)(?!\\d+).*$"测试过,没有问题滴。
"^.*?(? <!\\d)(\\d+)(?!\\d).*$"
匹配最后一个出现的数字
"^.*(? <!\\d)(\\d+)(?!\\d).*$"
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String s=f("adfjsdl3434adfjl;afds234fasdf3344adsf");
StringBuffer sb=new StringBuffer(s);
System.out.println(sb.reverse());
}
public static String f(String s)
{
String str="";
for(int i=s.length()-1;i>-1;i--)
{ char c1=s.charAt(i);
char c2=s.charAt(i-1);
//将char封装成character
Character ch1=Character.valueOf(c1);
Character ch2=Character.valueOf(c2);
//如果不是数字
if(!ch1.isDigit(c1))
{
}
else if(ch1.isDigit(c1)&&!ch2.isDigit(c2))
{
str+=c1;
return str;
}
else
{
str+=c1;
}
}
return null;
}
}