繁体   English   中英

在Java中拆分和裁剪字符串数组

[英]Split and Crop a string array in Java

我对String有一点问题。 字符串看起来像这样:

A/46\\-54.67/48\\-6.94/52\\2.41/54\\0.00/38\\-0.18/34\\0.06/32\\-27.22 (...)

这是UDP-Request的答案。 请求如下:R / 46/48(...)/ 32(...),它意味着:给我#46,#48的价值......答案如上所示。

目标:

最后,我只希望每个请求的字符串中的特定值为double。

我最喜欢的是一个有3(或2)个args的课程。 第一个参数将是String it self,第二个参数将是String内的位置(如46之后的Value)。 并且,如果需要,还可以使用三分之一作为值的结尾,例如/。 它返回一个包含值的数组。

(对我来说不是一个真正的解决方案:我只能立即请求Value,因此答案将更容易使用。问题,如果每次需要做更多的UDP请求。当前请求将是每秒10次,最后的情况会更频繁。而且我必须用值来计算)

问题:

字符串不一致。 返回的值可以有不同的数字,可以签名或不签名。 一致性仅为: A/46\\(digit for value 46)/48\\(digit)/52\\(digit)/54\\(digit)/38\\_/34\\_/32\\_如您所见,值在“\\ /”之间。 我得到了一个“解决方案”,将价值观切割为特定的位置。 但是当数字改变时它失败了。

解?

(是的,我是一个真正的Java Greenhorn)我的尝试给了我一个看起来像这个的数组:

A / 46

-54.67 / 48

-6.94 / 52

2.41 / 54

0.00 / 38

-0.18 / 34

0.06 / 32

-27.22

所以,现在我不知道如何从Value中获取最后一部分将它们转换为double(数组)。

我希望我能够生动地描述我的问题。

感谢您的意见和建议。

先用/分裂; 你会得到一个字符串数组看起来像:

[ "A", "46\\-54.67", ... ]

忘掉第一个元素; 然后,对于每个其他元素,执行:

Double.parseDouble(theElement.subString(theElement.indexOf('\\')))

这将为您提供您想要的double ; 你已经离开做的一切都是让这些double要将其秒。

另一种解决方案是使用此正则表达式遍历字符串:

(\d+)\\(-?\d+\.\d+)

正则表达式的第一组捕获整数,第二组捕获双精度:

final Pattern p = Pattern.compile("(\\d+)\\\\(-?\\d+\\.\\d+)");

final Matcher m = p.matcher(resultString);

while (m.find())
     // deal with m.group(1), m.group(2)

这个基于正则表达式的代码可能适合您:

String str = "A/46\\-54.67/48\\-6.94/52\\2.41/54\\0.00/38\\-0.18/34\0.06/32\\-27.22/38";
Pattern p = Pattern.compile("\\\\(-?\\d+\\.\\d+)/(\\d+)");
Matcher m = p.matcher(str);
while (m.find()) {
    System.out.printf("Before: %s, After: %s%n", m.group(1), m.group(2));
}

OUTPUT:

Before: -54.67, After: 48
Before: -6.94, After: 52
Before: 2.41, After: 54
Before: 0.00, After: 38
Before: -0.18, After: 34
Before: -27.22, After: 38

编辑:将这些匹配的值放在ArrayLists中:

String str = "A/46\\-54.67/48\\-6.94/52\\2.41/54\\0.00/38\\-0.18/34\0.06/32\\-27.22/38";
Pattern p = Pattern.compile("\\\\(-?\\d+\\.\\d+)/(\\d+)");
Matcher m = p.matcher(str);
List<Double> beforeList = new ArrayList<Double>();
List<Integer> afterList = new ArrayList<Integer>();
while (m.find()) {
    beforeList.add(Double.parseDouble(m.group(1)));
    afterList.add(Integer.parseInt(m.group(2)));
}
System.out.printf("Before: %s, After: %s%n", beforeList, afterList);

我在不使用IDE的情况下键入了这个,因此可能会出现一些小错误:

//Split at /
String[] parts = udpResponse.split("/");

//for each part (apart from the initial A)
for (int i=1; i<parts.length; i++) {

   //the part is of the form aaa\bbb where aaa and bbb are numbers
   String[] keyValue = parts[i].split("\\");
   double key = Double.parseDouble(keyValue[0]); //number before \
   double value = Double.parseDouble(keyValue[1]); //number after \

   //do whatever you like with the numbers... 
}

试试这个

   String test="A/46\\-54.67/48\\-6.94/52\\2.41/54\\0.00/38\\-0.18/34\\0.06/32\\-27.22";
   String[] arr=test.split("\\\\");
   double[] dub=new double[arr.length];
   int k=0;
   for (String i:arr){
        if(i.split("/").length!=1) {
        dub[k]=Double.parseDouble(i.split("/")[1].trim());
        k++;
        }
   }

我建议你使用String.split() 这是一个方便的函数,用于相对简单的字符串解析,例如您的示例。 首先,您需要在'/'上拆分UDP回复。 看起来你忽略了结果数组中的第一个和最后一个String 对于剩余的String ,你可以使用for循环依次调用每个String.split()上的String.split() ,拆分'\\'字符。

暂无
暂无

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

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