从String获取带有随机数字的第一个值

时间:2014-10-29 10:29:14

标签: java string replace substring

在我的应用程序中,我收到一个这样的字符串:

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个以上的数字。如果有一个随机数位,我怎么才能获得第一个值?

提前谢谢。

4 个答案:

答案 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., ]", ""));

希望它会对你有所帮助。