怎么在字符串中将有意义的数字提取出来
如何在字符串中将有意义的数字提取出来
我用了如下方法
String a ="1*2*3*(7+8)*9*10*11";
List<String> digitList = new ArrayList<String>();
Pattern p = Pattern.compile("[^0-9]");
Matcher m = p.matcher(a);
String result = m.replaceAll("");
for (int i = 0; i < result.length(); i++) {
digitList.add(result.substring(i, i+1));
}
System.out.println(digitList);
结果是:[1, 2, 3, 7, 8, 9, 1, 0, 1, 1]
但我想要的结果是:[1,2,3,,7,8,9,10,11]
------解决方案--------------------
String a ="1*2*3*(7+8)*9*10*11";
List<String> digitList = new ArrayList<String>();
Pattern p = Pattern.compile("([0-9]+)");
Matcher m = p.matcher(a);
while(m.find()){
digitList.add(m.group());
}
System.out.println(digitList);
------解决方案--------------------
按顺序将所有的字符入栈,然后出栈时,每个字符通过正则判断,是否是数字,
是的话,就是想要的,如果有连续的数字,则连接起来,诸如(11)
待字符完全出栈,则拿到了楼主想要的结果
可能方案比较挫,欢迎大家探讨
------解决方案--------------------
------解决方案--------------------
三楼正解
------解决方案--------------------
如果你这个字符串都是这种表达式规律的, 用正则split一下就行
------解决方案--------------------
我用了如下方法
String a ="1*2*3*(7+8)*9*10*11";
List<String> digitList = new ArrayList<String>();
Pattern p = Pattern.compile("[^0-9]");
Matcher m = p.matcher(a);
String result = m.replaceAll("");
for (int i = 0; i < result.length(); i++) {
digitList.add(result.substring(i, i+1));
}
System.out.println(digitList);
结果是:[1, 2, 3, 7, 8, 9, 1, 0, 1, 1]
但我想要的结果是:[1,2,3,,7,8,9,10,11]
------解决方案--------------------
String a ="1*2*3*(7+8)*9*10*11";
List<String> digitList = new ArrayList<String>();
Pattern p = Pattern.compile("([0-9]+)");
Matcher m = p.matcher(a);
while(m.find()){
digitList.add(m.group());
}
System.out.println(digitList);
------解决方案--------------------
按顺序将所有的字符入栈,然后出栈时,每个字符通过正则判断,是否是数字,
是的话,就是想要的,如果有连续的数字,则连接起来,诸如(11)
待字符完全出栈,则拿到了楼主想要的结果
可能方案比较挫,欢迎大家探讨
------解决方案--------------------
public static void main(String[] args) {
String a = "1*2*3*(7+8)*9*10*11";
List<String> digitList = new ArrayList<String>();
StringTokenizer st = new StringTokenizer(a, "+-*/()");
while (st.hasMoreElements()) {
digitList.add(st.nextElement().toString());
}
System.out.println(digitList);
}
------解决方案--------------------
三楼正解
public static void main(String[] args) {
String a ="1*2*3*(7+8)*9*10*11";
//将所有非数字转换成@符号,然后将所有连续的@(@@)符转换成单个@
a = a.replaceAll("\\D", "@").replaceAll("@+", "@");
String[] strArr = a.split("@");
for(String str:strArr){
System.out.println(str);
}
}
------解决方案--------------------
如果你这个字符串都是这种表达式规律的, 用正则split一下就行
------解决方案--------------------
String a = "1*2*3*(7+8)*9*10*11";
a = a.replace("(", "").replace(")", "").replace("+", "*");
List<String> list = new ArrayList<String>();
String[] strs = a.split("\\*");
for (String str : strs) {
list.add(str);
}
System.out.println(list);