2014-02-26 35 views
1

我希望能進行的操作是從去:Java字符串 - >兩個數字

String "32.63578..." 

到:

float 32.63 
long 578... //where '...' is rest of string 

喜歡的東西在Python如下:

split = str.find('.')+2 
float = str[:split] 
long = str[split:] 

我是新來的Java,所以我開始試圖查找等價物,但它似乎是一個更復雜的解決方案可能比正則表達式會是?除非有更多類似於Python的函數,而不是分割成一個char數組,並反覆迭代?

+3

看到java.substring方法。然後Float.parseFloat和方法的Long.parseLong – stinepike

+0

@StinePike'substring'沒有幫助,我不知道這個指數,需要「找」小數點。 – OJFord

+3

我強烈建議學習使用Javadocs。但是你需要的方法是'indexOf'和'substring'。 –

回答

5

使用indexOfsubstring方法:

String str = "32.63578"; 
int i = str.indexOf(".") + 3; 
String part1 = str.substring(0, i);  // "32.63" 
String part2 = str.substring(i);  // "578" 

float num1 = Float.parseFloat(part1); // 32.63 
long num2 = Long.parseLong(part2);  // 578 
+0

是的。然後將這些字符串轉換爲所需的數字類型。 – Floris

+0

+1爲完美答案:) – Nambi

+1

@弗洛里斯,我加了轉換部分。感謝您的評論。 – falsetru

0

如果您想徹底打破這兩個部分,您可以使用split method in String

但是,如果你想有尾隨小數就像在你的榜樣,你可能會想要做這樣的事情:

String str = "32.63578..."; 
String substr1, substr2; 

for (int i = 0; i < str.length(); i++) 
{ 
    if (str.charAt(i) == '.') 
    { 
    substr1 = str.substring(0, i + 3); 
    substr2 = str.substring(i + 3, str.length()); 
    break; 
    } 
} 

//convert substr1 and substr2 here 
+1

'indexOf'比手動循環更有效率。 – Floris

+1

@弗洛伊斯你確定嗎? –

+0

@弗洛伊斯它更乾淨,但效率可能完全相同。畢竟,獲取字符的索引意味着循環。 – yossarian

1

定期表達替代:

String str = "32.63578"; 
String[] parts = str.split("(?<=\\.\\d{2})"); 
System.out.println(parts[0]); // "32.63" 
System.out.println(parts[1]); // "578" 

關於reg使用的ular表達:

(?<=\.\d{2}) 

這是積極lookbehind(?<=...)。它在前面有.和2位數的位置匹配。

0
String s ="32.63578"; 
    Pattern pattern = Pattern.compile("(?<Start>\\d{1,10}.\\d{1,2})(?<End>\\d{1,10})"); 
    Matcher match = pattern.matcher(s); 
    if (match.find()) { 
     String start = match.group("Start"); 
     String ending = match.group("End"); 
     System.out.println(start); 
     System.out.println(ending); 
    } 
相關問題