Как извлечь числовые значения из строки ввода в java
Как я могу извлечь только числовые значения из входной строки?
Например, строка ввода может быть такой:
String str="abc d 1234567890pqr 54897";
Я хочу, чтобы числовые значения были только i.e, "1234567890"
и "54897"
. Все алфавитные и специальные символы будут отброшены.
Ответы
Ответ 1
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());
}
Ответ 2
Вы можете использовать метод .nextInt()
из Scanner
класс:
Сканирует следующий токен ввода как 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));
}
Ответ 3
Разделите строку в массив 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());
}
Ответ 4
Вы можете сделать что-то вроде:
Matcher m = Pattern.compile("\\d+").matcher(str);
while (m.find()) {
System.out.println(m.group(0));
}
Ответ 5
Вы можете использовать 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, отлично работает.
Ответ 6
Пример использования java Класс сканера
import java.util.Scanner;
Scanner s = new Scanner( "abc d 1234567890pqr 54897" );
s.useDelimiter( "\\D+" );
while ( s.hasNextInt() ){
s.nextInt(); // get int
}
Ответ 7
Если вы не хотите использовать регулярное выражение,
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
Ответ 8
Вы можете разбить строку на пробелы, чтобы получить отдельные записи, перебрать их и попробовать проанализировать их с помощью соответствующего метода на Integer
, используя подход try
/catch
для обработки случаев, когда разбор это число с ошибкой. Это, вероятно, самый простой подход.
В качестве альтернативы вы можете создать регулярное выражение для соответствия только числам и использовать их для их поиска. Это, вероятно, гораздо более показательно для большой строки. Регулярное выражение будет выглядеть как `\ b\d +\b '.
ОБНОВЛЕНИЕ: Или, если это не домашнее задание или подобное (я предположил, что вы искали подсказки для его реализации самостоятельно, но это могло бы быть недействительным), вы можете использовать решение, которое дает @npinti. Вероятно, это подход, который вы должны принять в производственном коде.
Ответ 9
public static List<String> extractNumbers(String string) {
List<String> numbers = new LinkedList<String>();
char[] array = string.toCharArray();
Stack<Character> stack = new Stack<Character>();
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<Character> stack) {
StringBuilder sb = new StringBuilder();
Enumeration<Character> 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<String> extractNumbers = extractNumbers(str);
for (String number : extractNumbers) {
System.out.println(number);
}
}
Ответ 10
Просто извлеките цифры
String str=" abc d 1234567890pqr 54897";
for(int i=0; i<str.length(); i++)
if( str.charAt(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<str.length(); i++)
if( str.charAt(i) > 47 && str.charAt(i) < 58) {
System.out.print(str.charAt(i));
flag = true;
} else {
System.out.print( flag ? '\n' : "");
flag = false;
}
Ответ 11
Вы хотите отменить все, кроме цифр и пробелов:
String nums = input.replaceAll("[0-9 ]", "").replaceAll(" +", " ").trim();
Дополнительные вызовы очищают удвоенные и ведущие/конечные пробелы.
Если вам нужен массив, добавьте split:
String[] nums = input.replaceAll("[0-9 ]", "").replaceAll(" +", " ").trim().split(" ");
Ответ 12
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);
}
}
Ответ 13
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);
}
В приведенном выше коде вы получите все числовые значения. то вы можете объединить их или что бы вы хотели сделать с этими числовыми значениями.
Ответ 14
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("[A-z]+$", ""));
/*return Double.parseDouble(string.replaceAll("[^[0-9]+[.[0-9]]*]", "").trim());*/
}
}catch (NumberFormatException e){
e.printStackTrace();
}
return 0;
}
Например, Если я прохожу 1.5 lac или 15,0000 или 15 Crores, тогда мы можем получить числовое значение из этой функции. Мы можем настроить строку в соответствии с нашими потребностями.
Напр. Результатом будет 150000 в случае 1.5 Lac