我有一個字符串,其中包含以下內容: 「它是你的方式,11.95蘇格蘭的歷史,14.50,在一天的時間裏學習微積分,29.95」 有沒有什麼辦法讓雙打從這個字符串?獲得一個字符串的雙倍數
回答
使用正則表達式提取雙打,然後Double.parseDouble()解析:
Pattern p = Pattern.compile("(\\d+(?:\\.\\d+))");
Matcher m = p.matcher(str);
while(m.find()) {
double d = Double.parseDouble(m.group(1));
System.out.println(d);
}
使用正則表達式(正則表達式[P])模塊,你最喜歡的語言,構造一個匹配器的模式\d+\.\d+
,將匹配器應用於輸入字符串,並將匹配的子字符串作爲捕獲組。
問題被標記爲Java的。 –
String text = "Did It Your Way, 11.95 The History of Scotland, 14.50, Learn Calculus in One Day, 29.95";
List<Double> foundDoubles = Lists.newLinkedList();
String regularExpressionForDouble = "((\\d)+(\\.(\\d)+)?)";
Matcher matcher = Pattern.compile(regularExpressionForDouble).matcher(text);
while (matcher.find()) {
String doubleAsString = matcher.group();
Double foundDouble = Double.valueOf(doubleAsString);
foundDoubles.add(foundDouble);
}
System.out.println(foundDoubles);
此發現雙打,整數(有和沒有小數點),和級分(領先的小數點):
public static void main(String[] args)
{
String str = "This is whole 5, and that is double 11.95, now a fraction .25 and finally another whole 3. with a trailing dot!";
Matcher m = Pattern.compile("(?!=\\d\\.\\d\\.)([\\d.]+)").matcher(str);
while (m.find())
{
double d = Double.parseDouble(m.group(1));
System.out.println(d);
}
}
輸出:
5.0
11.95
0.25
3.0
不過請注意parseDouble仍然可以拋出應逮住一個例外。伊莫避免所有的東西,只是使用Scanner.nextDouble()更簡單 – Voo
你的前瞻性取消了部分標題(例如'3.2.4')的資格,但你的捕獲組重新允許它們,[使其失敗](http:// www.ideone.com/5nARX)。 –
Java提供Scanner它允許您掃描一個String(或任何輸入流)並使用正則表達式分析基元類型和字符串標記。
這很可能是preferrable使用這個,而不是寫自己的正則表達式,純粹是爲了維護原因。
Scanner sc = new Scanner(yourString);
double price1 = sc.nextDouble(),
price2 = sc.nextDouble(),
price3 = sc.nextDouble();
這裏是我做到了,當我從用戶獲取輸入,不知道它會是什麼樣子:
Vector<Double> foundDoubles = new Vector<Double>();
Scanner reader = new Scanner(System.in);
System.out.println("Ask for input: ");
for(int i = 0; i < accounts.size(); i++){
foundDoubles.add(reader.nextDouble());
}
使用掃描儀(例如,從TutorialPoint)。 以上建議的正則表達式表達式在此示例上失敗:"Hi! -4 + 3.0 = -1.0 true"
檢測到{3.0, 1,0}
。
String s = ""Hello World! -4 + 3.0 = -1.0 true"";
// create a new scanner with the specified String Object
Scanner scanner = new Scanner(s);
// use US locale to be able to identify doubles in the string
scanner.useLocale(Locale.US);
// find the next double token and print it
// loop for the whole scanner
while (scanner.hasNext()) {
// if the next is a double, print found and the double
if (scanner.hasNextDouble()) {
System.out.println("Found :" + scanner.nextDouble());
}
// if a double is not found, print "Not Found" and the token
System.out.println("Not Found :" + scanner.next());
}
// close the scanner
scanner.close();
}
- 1. 在Java中獲得雙倍字符串
- 2. 從c中的一個字符串中提取雙倍數字
- 3. 從數字中獲得雙倍數
- 4. 如何解析字符串以獲得雙倍的值
- 5. 與雙倍字符串
- 6. 雙倍字符串與文化和只有一個小數位
- 7. 得到一個字符串雙C++
- 8. 獲得雙倍的.00
- 9. 獲得一個字符串
- 10. 獲得一個字符串
- 11. 獲得一個字符串
- 12. 獲得一個字符串
- 13. 獲得一個字符串
- 14. 獲得一個字符串
- 15. 爪哇圓翻倍並獲得雙倍
- 16. 替代QLineEdit獲得雙倍
- 17. 集成服務雙倍字符串
- 18. jsoncpp:將字符串轉換爲雙倍
- 19. WPF字符串到雙倍轉換器
- 20. 將字符串轉換爲雙倍
- 21. 將字符串轉換爲雙倍
- 22. 分割字符串並將字符串更改爲雙倍
- 23. C#:如何獲得一個字符串的第一個字符?
- 24. 從一個獲得兩個字符串
- 25. 如何從1x1x4雙倍獲得1x4雙倍?
- 26. 數字格式字符串:雙倍到時間
- 27. 將部分非數字字符串轉換爲雙倍
- 28. 獲得第一個數字字符串標識符
- 29. 以2位小數進行雙倍轉換的字符串
- 30. 字符串分數加倍
這是功課,不是嗎? –