13

入力文字列から数値のみを抽出するにはどうすればよいですか?

たとえば、入力文字列は次のようになります。

String str="abc d 1234567890pqr 54897";

数値のみ、つまり、、が必要"1234567890"です"54897"。アルファベットと特殊文字はすべて破棄されます。

4

16 に答える 16

23

クラスの.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));
}
于 2012-08-31T13:15:08.867 に答える
13
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());
}
于 2012-08-31T13:28:07.887 に答える
8

次に、を使用して文字列を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());
}
于 2012-08-31T13:17:42.237 に答える
5

あなたは次のようなことをすることができます:

Matcher m = Pattern.compile("\\d+").matcher(str);
while (m.find()) {
   System.out.println(m.group(0));
}
于 2012-08-31T13:17:35.847 に答える
2

使用できます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が提案していることは、うまく機能します。

于 2012-08-31T13:26:09.193 に答える
2

Javaスキャナークラスの使用例

import java.util.Scanner;

Scanner s = new Scanner( "abc d 1234567890pqr 54897" );
s.useDelimiter( "\\D+" );
while ( s.hasNextInt() ){
    s.nextInt(); // get int
}
于 2014-01-03T00:48:48.677 に答える
2

正規表現を使用したくない場合は、

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

于 2015-03-26T09:03:23.240 に答える
2

数字とスペースを除くすべてを破棄したい:

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

余分な呼び出しは、2倍の先頭/末尾のスペースをクリーンアップします。

配列が必要な場合は、分割を追加します。

String[] nums = input.replaceAll("[^0-9 ]", "").trim().split(" +");
于 2015-12-23T17:47:37.100 に答える
2
        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);
        }

上記のコードにより、すべての数値を取得できます。次に、それらをマージするか、それらの数値を使用してやりたいことをマージできます。

于 2016-05-06T05:56:37.330 に答える
1

スペースで文字列を分割して個々のエントリを取得し、それらをループして、 /アプローチをInteger使用して関連するメソッドでそれらを解析し、数値としての解析が失敗した場合を処理することができます。それはおそらく最も簡単なアプローチです。trycatch

または、番号のみに一致する正規表現を作成し、それを使用してすべてを検索することもできます。これは、大きな文字列の場合、おそらくはるかにパフォーマンスが高くなります。正規表現は`\b \ d + \b'のようになります。

更新:または、これが宿題などではない場合(自分で実装するための手がかりを探していたと思いますが、それは有効ではなかった可能性があります)、@npintiが提供するソリューションを使用できます。これはおそらく、本番コードで採用する必要のあるアプローチです。

于 2012-08-31T13:15:20.653 に答える
1
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);
    }
}
于 2012-08-31T13:44:34.110 に答える
1

数字を抽出するだけ

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;
    }
于 2013-06-27T04:28:33.430 に答える
0
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);

  }

 }
于 2015-12-23T10:46:42.703 に答える
0
 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クローレを渡すと、これらの機能から数値を取得できます。必要に応じて文字列をカスタマイズできます。たとえば。1.5Lacの場合の結果は150000になります

于 2017-06-20T09:00:01.540 に答える
0
String str = "abc d 1234567890pqr 54897";
str = str.replaceAll("[^\\d ]", "");

結果は「123456789054897」になります。

于 2019-12-11T11:44:53.187 に答える
0
String str = "abc34bfg 56tyu";

str = str.replaceAll("[^0-9]","");

出力:3456

于 2021-01-14T15:49:54.620 に答える