繁体   English   中英

从字符串获取具有随机数字的第一个值

[英]Get from String the first value with random digits

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

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(",","");

但是当第一个值只有一位数字时,获取第二个值的字符,并且此代码可以超过5位数字。 如果我有一个随机的数字,我怎么才能只获得第一个值?

先感谢您。

使用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警告:字符串看起来很长,您只对其中的一小部分感兴趣。 split所做的是返回原始字符串的视图,因此您的程序仍保留大字符串。 如果对大量字符串执行此操作,则可能会在内存中遇到不必要的内存问题。

用户正则表达式来查找您的第一个数字序列。

例如:

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 = "[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 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., ]", ""));

希望对您有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM