![](/img/trans.png)
[英]How do split only numbers from a given string of “$##,##,###.###” in 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());
}
}
堆棧數據結構可能在這里有所幫助。 所以這是你可以做的:
您可以使用正則表達式。 這是一個(非常粗略)草圖:
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.