簡體   English   中英

用字母和數字轉換字符串

[英]Converting string with letters and numbers

因此,我有一個聲明為String name = "John 20150.00" ,我想將該名稱分解為另一個變量,並將數字分解為另一個變量,這可能嗎?

我嘗試使用Double.parseDouble(name); 方法,但是當它運行時,它不能正常工作。

我應該使用什么?

您可以使用java.util.Scanner分解字符串並解析結果

Scanner s = new Scanner(name);
String firstName = s.next();
double number = s.nextDouble();

您還可以利用.hasNextDouble()之類的方法來測試下一個標記(標記之間的默認分隔符為空格)是否實際上可以解析為雙精度型。 Scanner類還提供了正則表達式的靈活性,以定義令牌定界符,使其功能非常強大。

首先,您需要分割字符串:

String[] parts = name.split(" ");

在這里,我們在空間上分裂了。

然后我們通過以下方式獲得每個部分:

String firstName = parts[0];
double cash = Double.parseDouble(parts[1]);

那應該工作。

您應該將字符串分為兩部分:字母部分和數字部分。 使用indexOf('')查找將名稱和字母分開的空白索引。 然后使用substring()創建兩個字符串,一個用於字母,一個用於數字。 有關詳細信息,您可以檢查有關如何使用所有這些方法的java api。

一個例子

String str = "Hi 4.5";
int index = str.indexOf(' ');
String letters = str.substring(0, index);
String numbers = str.substring(index + 1);
double numbersDouble = Double.parseDouble(numbers);
System.out.println(numbersDouble);

您可以在解析之前使用正則表達式去除非數字字符:

double d = Double.parseDouble(name.replaceAll("[^\\d.]", ""));

提取數字后,可以類似地提取名稱:

name = name.replaceAll("[\\d.]","").trim();

這種使用正則表達式的方法的優點是,數字在字符串中是第一個還是最后一個都不重要-它仍然可以使用。 如果名稱中有空格,例如"Billy Bob 123.45" ,它也可以使用

您可以通過幾種方法實現此目標,而選擇的方法將取決於您的總體要求

你可以...

例如,只需使用String#split ...

String value = "John 20150.00";
String[] parts = value.split(" ");
for (String part : parts) {
    System.out.println(part);
}

這使您可以將String在已知標記(可能是正則表達式本身)上分開

你可以...

使用正則表達式...

String regExp = "([A-Za-z]+)|([0-9]+(.[0-9]+))";
Pattern pattern = Pattern.compile(regExp);
Matcher matcher = pattern.matcher(value);
while (matcher.find()) {
    System.out.println(matcher.group());
}

這將使您能夠匹配更復雜的規則集。 Matcher包含groupCountgetGroup方法,因此您可以單獨訪問元素。

這將允許你來處理情況,案件split令牌可能會出現一個捕獲組內,例如John Walker 20150.00 ,你可能可以使用([A-Za-z]+([ ][A-Za-z]+))|([0-9]+(.[0-9]+))分別捕獲Jonh Walker2015.00

您不能(輕松地)使用split ...,但是,它變得更加復雜,例如,如果String包含其他名稱和數量,則尤其如此...

nb:我應該指出,我的正則表達式非常基礎,因此可能會有更好的表達式更靈活,結果更整潔……

為什么不呢?

String[] cake = name.split(" ")
String a = cake[0]
double b = Double.parseDouble(cake[1])

首先,您要分隔字符串並加倍

StringTokenizer st = new StringTokenizer(name);
Sting personsName = st.nextToken();
double d = Double.parseDouble(personName);

那就是你需要做的。 該錯誤是因為您試圖將字符串對象轉換為數字,但是它包含的字母不僅是數字。

可能是這樣的:

String name = "John 20150.00";
String[] parts = name.split(" ");
String person = parts[0];
Double value = new Double(parts[1]);

暫無
暫無

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

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