Java提取字符串中的數字


在Java中,如果輸入一串由其他非數字字符隔開的數字,但卻想要將其中的數字提取出來,網上已經給出多種解決方案,以下對這些方法及其對應的情況進行簡單的總結,並提出自己的解決方案:

1.多個由不確定字符隔開的單個數字

該方法只適用於分離字符串中的單個數字字符,因此得到的結果也是個位數的數字。
例如:

1 5、2,5。1    9 2

此時可以考慮將輸入存入String變量,依次讀取字符串中的每個字符,並判斷是否為數字再將其轉化為整型數據。而把單個char類型字符轉化為整型的方法,網上已有非常常見的簡單轉化方法,即將目標數字字符與'0'字符相減,以下做出展示:

import java.util.ArrayList;
import java.util.Scanner;

public class NumberCollector {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String charList = in.nextLine();
        ArrayList<Integer> numList = new ArrayList<>();

        //遍歷字符串中每個字符,將數字字符轉化為整型數字
        for (int i = 0; i < charList.length(); i++) {
            if (Character.isDigit(charList.charAt(i))) {
                //通過將目標數字字符與'0'字符ASCII碼相減,結果即為該數字本身的整型數字
                numList.add(charList.charAt(i) - '0');
            }
        }

        for (int each : numList) {
            System.out.println(each);
        }
    }
}

2.多個由特定字符隔開的任意數字

該方法相比第一種方法,雖然能夠篩選出非個位數的數字,但在操作前,需要明確分割數字的字符。
若輸入的字符串中,數字與數字之間,都是被唯一確定的字符隔開,例如:

5 4 6 12 100 3
1,2,51,12,6

此時可以采用網上給出的一種普遍處理方法,使用split分割字符串再使用Integer中的ParseInt方法將其進行轉換:

import java.util.ArrayList;
import java.util.Scanner;

public class NumberCollector {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String[] numStr = in.nextLine().split(" "); //此處以空格字符分割為例
        ArrayList<Integer> numList = new ArrayList<>();

        //遍歷分割后的字符串數組並依次轉型為整型
        for (int i = 0; i < numStr.length; i++) {
            numList.add(Integer.parseInt(numStr[i]));
        }

        for (int each : numList) {
            System.out.println(each);
        }
    }
}

3.由任意字符隔開的任意數字

由於在開發中,常會遇到奇怪刁鑽的情況,在這里我提出一些個人的想法與應對方案,如題,若遇到此種情況,例如輸入:

5   10,,,103xyz50 a.10

解決思路:若要提取其中的數字轉化為整型數字,可以考慮遍歷字符串中每個字符,若該字符為數字,則往預備區里存入該數字字符,當讀到非數字字符時,即可認為預備區里已經有一個完整的數字字符串,此時再考慮將其轉化為整型數字。
以下給出實現代碼:

import java.util.ArrayList;
import java.util.Scanner;

public class NumberCollector {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String charList = in.nextLine();
        in.close();

        String integer = ""; //作為數字字符串的預備區
        ArrayList<Integer> numList = new ArrayList<>();

        for (int i = 0; i < charList.length(); i++) {
            //遍歷字符串中每個字符時,若該字符為數字字符,則存入預備區
            if (Character.isDigit(charList.charAt(i))) {
                integer += charList.charAt(i);

                //避免字符串最后一位為數字而遺漏收集的情況
                if (i == charList.length() - 1) {
                    numList.add(Integer.parseInt(integer));
                }
            }else if (!integer.isEmpty()) { //讀取到非數字字符,並且檢查預備區是否為空
                numList.add(Integer.parseInt(integer));
                integer = "";
            }
        }

        //輸出收集到的整型數字
        for (int each : numList) {
            System.out.println(each);
        }
    }
}

針對上面給出的輸入樣例,可得輸出:

5
10
103
50
10

這種方法同時還可以適用於第一,第二種方法所針對的情況,但如果問題情況非常簡單時,當然還是第一,第二種方法省時省力。


以上是自己根據平時總結的一些網絡上以及個人的方法和技巧,若有疏漏或更好的建議,非常歡迎對此作出評論或提出意見,這樣對我也會有很大的幫助!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM