从字符串获取随机数字
问题描述:
在我的应用程序的第一个值我收到一个字符串是这样的:从字符串获取随机数字
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位数以上。如果有一个随机数字的数字,我如何才能获得第一个值?
预先感谢您。
答
使用子/的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
: 它看起来像字符串很长,而且你只对它的一小部分感兴趣。什么分割就是返回一个原始字符串的视图,所以你的公关图仍然保持着大字符串。如果您为大量字符串执行此操作,则可能会遇到内存不必要的内存问题。
答
您可以拆分字符串并获取第一个元素。不要忘记太删除[
字符:
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(','));
你不应该去想的内存消耗,除非你有很多处理字符串(超过几百万以上)。
答
用户正则表达式来查找您的第一个数字序列。
例如:
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
答
试试这个:
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., ]", ""));
希望它会帮助你。
+1这种方法最简单和更轻,那么'分裂'这将需要遍历整条线。我建议的唯一的事情就是添加引用,该引用将持有来自'substring'的结果,因为现在看起来像'substring'我们操作'string1'的值,而实际上我们正在创建新的字符串。 – Pshemo 2014-10-29 10:40:31
对。好点子。更新。谢谢。 – aioobe 2014-10-29 10:44:00
谢谢你,我用这种方法。我需要管理大量的字符串,所以我试图在任何时候逃避“拆分”。 – 2014-10-29 10:47:44