簡體   English   中英

如何在Java中拆分字符串中的數字?

[英]How to split numbers from a string in Java?

我在思考分割字符串數量的方法時遇到了問題。 我已經完成的工作是將字符串拆分成多個字符。

所以,如果表達式為gi356f ,它將給出:

g
i
3
5
6
f

但我希望將356視為一個自己尊重的數字。 我正在處理的問題包括看起來像(345+3)*/3的字符串

我試着查看字符串和下一個字符串中的當前字符,並嘗試檢查它是否為數字,如果是,則附加它們但這會導致許多錯誤。 例如,它只能處理兩位數的長數字而且不太好,如果字符串是43,它將使用3兩次。 (例如,一次是43次,另一次是3次)。 此外,如果最后的表達式以一定數量的給定字符串結束,如果也將被處理兩次。

我不知道如何解決這個問題。 我想也許可以使用正則表達式或掃描儀,但不知道如何去做,即使在一些較小的例子在線查看一些代碼之后。

您可以使用正則表達式。 這是簡單情況的解決方案(只是整數)。 \\\\d是小數,加+表示一次或多次 有關更多信息,請參閱http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html

import java.util.regex.*;

public class Main {
  public static void main(String[] args) {
    Pattern p = Pattern.compile("\\d+");
    Matcher m = p.matcher("(345+3)*/3");
    while(m.find())
      System.out.println(m.group());
  }
}

堆棧數據結構可能在這里有所幫助。 所以這是你可以做的:

  1. 掃描每個角色。
  2. 檢查字符是否為數字。 如果是,請放入堆棧。
  3. 繼續將char添加到堆棧,直到獲得任何非數字字符。
  4. 獲得非數字字符后,從堆棧中取出所有數字字符並轉換為數字。
  5. 繼續直到炭未完成。

您可以使用正則表達式。 這是一個(非常粗略)草圖:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

String findIntegerOccurrence(String inputString)
{
    // Define pattern to match your numbers here.
    Pattern pattern = Pattern.compile("... reg expr here...");
    Matcher matcher = pattern.matcher(inputString);

    if (matcher.find()) // Checks if the regular expression matches.
    {
        // Extract the substring of inputString that has matched
        return matcher.group();
    }
    else
    {
        return null;
    }
}

您基本上需要為數字定義適當的正則表達式,然后使用它來查找輸入字符串中的所有匹配項。 上面的示例只是一個草圖,可以看到如何定義正則表達式並匹配它。 由於您希望匹配所有出現的數字並將它們與輸入的其余部分分開,因此您需要一個更精細的解決方案(上面的示例僅顯示您需要的類和一些有用的方法)。

您可以在Java文檔中找到Java中正則表達式的所有詳細信息

編輯

刪除編輯:我添加了所需正則表達式的描述,但在我完成更改前幾分鍾,已將相同的正則表達式添加為另一個答案的注釋。 請參考其他答案。

我正在創建一個計算器,我正在使用Stacks將等式分成數字和運算符,就像@Gaurav所說的那樣。 這是我正在使用的代碼:

for (int i=0; i<equation.length(); i++) {

            equationChar = String.valueOf(equation.charAt(i));

            if (numbers.contains(equationChar)) {

                equationHold += equationChar;

                if (i==(equation.length()-1)) {

                    stackNumbers.push(equationHold);    
                }

            } else {

                stackNumbers.push(equationHold);
                stackOperators.push(equationChar);
                equationHold = "";

            }

        }

我發現它比處理String Split表達式更容易。 我還沒有處理括號和東西,所以代碼可能會改變..

如果您不需要非數字字符,請執行以下操作:

解析字符串一次,用空格替換所有非數字字符。 解析生成的字符串,隨着時間的推移刪除雙重空格。 輸入字符串gi356f首先變為_ 356 ,_為空格。 如果你刪除了雙重空格,你就會得到你想要的東西。

另一個例子d45 * 9j變為_45_9_然后,當你將它分成子串時,你將有45和9以及單獨的數字。

有很多方法可以做到這一點,最好的方法是嘗試不同的方法,直到找到適合你的方法。

Pattern pp = Pattern.compile("\\d+");
Matcher m = pp.matcher("sdfsdf123sdfs3464ew111");
While(m.find())
{
    System.out.println(m.group());
}

輸出將是:

123
3464
111

查看 !

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM