在我的应用程序中,我收到一个这样的字符串:
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]";
从这个字符串我只需要第一个值(来自String1和String2)。这个问题解决了,这个代码可以得到前两位数字:
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个以上的数字。如果有一个随机数位,我怎么才能获得第一个值?
提前谢谢。
答案 0 :(得分:2)
使用substring / 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)
用户正则表达式查找您的第一个数字序列。
例如:
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
答案 2 :(得分: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(','));
除非你处理许多字符串(超过几百万),否则你不应该考虑内存消耗。
答案 3 :(得分: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., ]", ""));
希望它会对你有所帮助。