2014-10-29 202 views
2

在我的應用程序的第一個值我收到一個字符串是這樣的:從字符串獲取隨機數字

String1 = "[6, I.3, Contaminación Mecánica, 0.0, 0.0, 0.0, 196.875, 0.0, 196.875]"; 
String2 = "[16, E.19, Errores de los usuarios, 0.0, 0.0, 3281.25, 0.0, 0.0, 3281.25]"; 

從這個字符串我只需要第一個值(從字符串1和字符串)。這解決了,有了這個代碼,你在哪裏得到的前兩個數字:

String Amenaza = InformeAmenazasAGR.get(i).toString(); 
    Amenaza = Amenaza.substring(1,3); 
    Amenaza = Amenaza.replace(",",""); 

現在我可以接受這個字符串太

String3 = "[39854, R.01, Robo Outdoor, 0.0, 84000.0, 24500.0, 24500.0, 0.0, 133000.0]"; 

我試圖用

String Amenaza = InformeAmenazasAGR.get(i).toString(); 
    Amenaza = Amenaza.substring(1,6); 
    Amenaza = Amenaza.replace(",",""); 

但當第一個值只有1位數,得到第二個值的字符,這個代碼可以有5位數以上。如果有一個隨機數字的數字,我如何才能獲得第一個值?

預先感謝您。

回答

2

使用子/的indexOf(如果你問我偏愛的方式)

String firstNumber = string1.substring(1, s1.indexOf(',')); 

的第一個參數(1)可確保您不包括[字符,第二個參數是索引第一個,字符。

使用正則表達式(有用的,如果你想推廣到包括其他數字

Pattern p = Pattern.compile("\\[(\\d+),"); 
Matcher m = p.matcher(s1); 
m.find(); 
System.out.println(m.group(1)); 

注意模式對象可以爲多個號碼,提取被重用。

一個小小的警告關於split 它看起來像字符串很長,而且你只對它的一小部分感興趣。什麼分割就是返回一個原始字符串的視圖,所以你的公關圖仍然保持着大字符串。如果您爲大量字符串執行此操作,則可能會遇到內存不必要的內存問題。

+1

+1這種方法最簡單和更輕,那麼'分裂'這將需要遍歷整條線。我建議的唯一的事情就是添加引用,該引用將持有來自'substring'的結果,因爲現在看起來像'substring'我們操作'string1'的值,而實際上我們正在創建新的字符串。 – Pshemo 2014-10-29 10:40:31

+0

對。好點子。更新。謝謝。 – aioobe 2014-10-29 10:44:00

+1

謝謝你,我用這種方法。我需要管理大量的字符串,所以我試圖在任何時候逃避「拆分」。 – 2014-10-29 10:47:44

0

您可以拆分字符串並獲取第一個元素。不要忘記太刪除[字符:

String String1 = "[6214, I.3, Contaminación Mecánica, 0.0, 0.0, 0.0, 196.875, 0.0, 196.875]"; 

String[] split = String1.split(","); 
System.out.println(split[0].replace("[", "")); 

這種做法是明確和自我解釋(讓我輸入字符串的第一個元素),當你要堅持的一個參考是非常有用分割字符串進一步訪問。如果您只攜帶有關獲取的第一要素,我建議子的做法太:

String firstElem = String1.subString(1 , String1.indexOf(',')); 

你不應該去想的內存消耗,除非你有很多處理字符串(超過幾百萬以上)。

1

用戶正則表達式來查找您的第一個數字序列。

例如:

String[] input = { 
    "[6, I.3, Contaminación Mecánica, 0.0, 0.0, 0.0, 196.875, 0.0, 196.875]", 
    "[16, E.19, Errores de los usuarios, 0.0, 0.0, 3281.25, 0.0, 0.0, 3281.25]", 
    "[39854, R.01, Robo Outdoor, 0.0, 84000.0, 24500.0, 24500.0, 0.0, 133000.0]" 
}; 
//       | preceded by start of input and open square bracket 
//       |  | digit sequence of any length (1+ characters) 
Pattern p = Pattern.compile("(?<=^\\[)\\d+"); 
// iterating various inputs 
for (String s: input) { 
    // matching 
    Matcher m = p.matcher(s); 
    if (m.find()) { 
     // printing out match 
     System.out.println(m.group()); 
    } 

} 

輸出

6 
16 
39854 
0

試試這個:

String String1 = "[645245, I.3, Contaminación Mecánica, 0.0, 0.0, 0.0, 196.875, 0.0, 196.875]"; 
String[] splitdata = String1.split(",");  
System.out.println(splitdata[0].replaceAll("[^a-zA-Z0-9., ]", "")); 

希望它會幫助你。