2014-10-29 212 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., ]", "")); 

希望它会帮助你。