如何从java中的输入字符串中提取数值

如何仅从输入字符串中提取数值?

例如,输入字符串可能如下所示:

String str="abc d 1234567890pqr 54897"; 

我只想要数值,即"1234567890""54897" 。 所有字母和特殊字符都将被丢弃。

 String str=" abc d 1234567890pqr 54897"; Pattern pattern = Pattern.compile("\\w+([0-9]+)\\w+([0-9]+)"); Matcher matcher = pattern.matcher(str); for(int i = 0 ; i < matcher.groupCount(); i++) { matcher.find(); System.out.println(matcher.group()); } 

您可以使用Scanner类中的.nextInt()方法:

将输入的下一个标记扫描为int。

或者,您也可以这样做:

 String str=" abc d 1234567890pqr 54897"; Pattern p = Pattern.compile("(\\d+)"); Matcher m = p.matcher(str); while(m.find()) { System.out.println(m.group(1)); } 

使用yourString.toCharArray();将字符串拆分为char数组yourString.toCharArray(); 然后遍历字符并使用Character.isDigit(ch); 确定这是否是数值。 或者遍历整个字符串并使用str.charAt(i) 。 例如:

 public static void main(String[] args) { String str = "abc d 1234567890pqr 54897"; StringBuilder myNumbers = new StringBuilder(); for (int i = 0; i < str.length(); i++) { if (Character.isDigit(str.charAt(i))) { myNumbers.append(str.charAt(i)); System.out.println(str.charAt(i) + " is a digit."); } else { System.out.println(str.charAt(i) + " not a digit."); } } System.out.println("Your numbers: " + myNumbers.toString()); } 

你可以这样做:

 Matcher m = Pattern.compile("\\d+").matcher(str); while (m.find()) { System.out.println(m.group(0)); } 

你可以使用str = str.replaceAll("replaced_string","replacing_string");

 String str=" abc d 1234567890pqr 54897"; String str_rep1=" abc d "; String str_rep2="pqr "; String result1=str.replaceAll("", str_rep1); String result2=str.replaceAll(",",str_rep2); 

npinti建议也可以使用。

使用java Scanner类的示例

 import java.util.Scanner; Scanner s = new Scanner( "abc d 1234567890pqr 54897" ); s.useDelimiter( "\\D+" ); while ( s.hasNextInt() ){ s.nextInt(); // get int } 

如果你不想使用正则表达式,

 String str = " abc d 1234567890pqr 54897"; char[] chars = new char[str.length()]; int i = 0; for (int j = 0; j < str.length(); j++) { char c = str.charAt(j); if (Character.isDigit(c)) { chars[i++] = c; if (j != chars.length - 1) continue; } if (chars[0] == '\0') continue; String num = new String(chars).trim(); System.out.println(num); chars = new char[str.length()]; i = 0; } 

产量:1234567890 54897

您想要丢弃除数字和空格之外的所有内容:

 String nums = input.replaceAll("[^0-9 ]", "").replaceAll(" +", " ").trim(); 

额外的调用会清理双倍和前导/尾随空格。

如果需要数组,请添加拆分:

 String[] nums = input.replaceAll("[^0-9 ]", "").trim().split(" +"); 

您可以在空格上拆分字符串以获取单个条目,循环遍历它们,并尝试使用Integer上的相关方法解析它们,使用try / catch方法来处理解析数据失败的情况。 这可能是最直接的方法。

或者,您可以构造一个正则表达式以仅匹配数字并使用它来查找所有数字。 对于大字符串来说,这可能更具性能。 正则表达式看起来像`\ b \ d + \ b’。

更新:或者,如果这不是家庭作业或类似的(我假设你正在寻找自己实施它的线索,但这可能不是有效的),你可以使用@npinti给出的解决方案。 这可能是您应该在生产代码中采用的方法。

 public static List extractNumbers(String string) { List numbers = new LinkedList(); char[] array = string.toCharArray(); Stack stack = new Stack(); for (int i = 0; i < array.length; i++) { if (Character.isDigit(array[i])) { stack.push(array[i]); } else if (!stack.isEmpty()) { String number = getStackContent(stack); stack.clear(); numbers.add(number); } } if(!stack.isEmpty()){ String number = getStackContent(stack); numbers.add(number); } return numbers; } private static String getStackContent(Stack stack) { StringBuilder sb = new StringBuilder(); Enumeration elements = stack.elements(); while (elements.hasMoreElements()) { sb.append(elements.nextElement()); } return sb.toString(); } public static void main(String[] args) { String str = " abc d 1234567890pqr 54897"; List extractNumbers = extractNumbers(str); for (String number : extractNumbers) { System.out.println(number); } } 

只需提取数字

 String str=" abc d 1234567890pqr 54897"; for(int i=0; i 47 && str.charAt(i) < 58) System.out.print(str.charAt(i)); 

另一个版本

 String str=" abc d 1234567890pqr 54897"; boolean flag = false; for(int i=0; i 47 && str.charAt(i) < 58) { System.out.print(str.charAt(i)); flag = true; } else { System.out.print( flag ? '\n' : ""); flag = false; } 
 public class ExtractNum { public static void main(String args[]) { String input = "abc d 1234567890pqr 54897"; String digits = input.replaceAll("[^0-9.]",""); System.out.println("\nGiven Number is :"+digits); } } 
  String line = "This order was32354 placed 343434for 43411 QT ! OK?"; String regex = "[^\\d]+"; String[] str = line.split(regex); String required = ""; for(String st: str){ System.out.println(st); } 

通过上面的代码,您将获得所有数值。 然后你可以合并它们或你想用这些数值做什么。

  public static String convertBudgetStringToPriceInteger(String budget) { if (!AndroidUtils.isEmpty(budget) && !"0".equalsIgnoreCase(budget)) { double numbers = getNumericFromString(budget); if( budget.contains("Crore") ){ numbers= numbers* 10000000; }else if(budget.contains("Lac")){ numbers= numbers* 100000; } return removeTrailingZeroesFromDouble(numbers); }else{ return "0"; } } 

从字母数字字符串中获取数值

  public static double getNumericFromString(String string){ try { if(!AndroidUtils.isEmpty(string)){ String commaRemovedString = string.replaceAll(",",""); return Double.parseDouble(commaRemovedString.replaceAll("[Az]+$", "")); /*return Double.parseDouble(string.replaceAll("[^[0-9]+[.[0-9]]*]", "").trim());*/ } }catch (NumberFormatException e){ e.printStackTrace(); } return 0; } 

例如。 如果我通过1.5 lac或15,0000或15 Crores,那么我们可以从这些fucntion获得数值。 我们可以根据需要定制字符串。 例如。 在1.5 Lac的情况下,结果将是150000