java - 仅使用第一个实例 java 分割字符串

标签 java arrays regex string

我从一些 telnet 服务器收到以下响应

String response = "I:BARCO@noiclt22815||K:CMS||O:REgetPerspectiveList||A0:googleP||A1:yahooP||A2:gmail||A3:test||A4:hello||A16:CCTV Barco||A17:CCTV: Corridor CC||A18:CCTV: DR Andy Warhol||A19:CCTV: DR Gaudi (Analog)||A20:CCTV: DR Miro||A21:CCTV: Entrance CC||A22:CCTV: Gaudi Demo Room Megapixel||";

我想获取例如 A0、A1 等的属性值,因此我编写了以下逻辑

String[] strings = response.split("[||]");
List<String> list = new ArrayList<>();

for (String string : strings) {
    if (string.contains(":")) {
        String[] attributes = string.split(":");
        if (attributes[0].startsWith("A")) {
            list.add(attributes[1]);
        }
    }
}

但我的问题是 string.split(":") split 给了我字符串数组,但我只需要两个长度大小的字符串数组。例如响应 A17 属性为我提供“CCTV”作为属性[1],“Corridor CC”作为属性[2],但我只需要“CCTV:Corridor CC”作为属性[1]。

我应该在 string.split(regexp) 中编写什么正则表达式,以便可以根据冒号运算符的第一个实例仅使用两个长度大小的字符串数组来拆分字符串。

最佳答案

下面的代码首先在管道上进行拆分,然后使用正则表达式提取属性和特性。请注意,即使在那里,您也可能可以进行另一次拆分。

String response = "I:BARCO@noiclt22815||K:CMS||O:REgetPerspectiveList||A0:googleP||A1:yahooP||A2:gmail||A3:test||A4:hello||A16:CCTV Barco||A17:CCTV: Corridor CC||A18:CCTV: DR Andy Warhol||A19:CCTV: DR Gaudi (Analog)||A20:CCTV: DR Miro||A21:CCTV: Entrance CC||A22:CCTV: Gaudi Demo Room Megapixel||";
String[] metaParts = response.split("\\|\\|");

for (int i=0; i < metaParts.length; ++i) {
    String property = metaParts[i].replaceAll("(.*):(.*)", "$1");
    String attribute = metaParts[i].replaceAll("(.*):(.*)", "$2");
    System.out.println(property + ":" + attribute);
}

正如这里其他人所说,正则表达式并不是解决所有开发问题的 Elixir 。拆分无疑是解决这个问题的重任。

关于java - 仅使用第一个实例 java 分割字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34915657/

相关文章:

java - 是否有与 Eclipse "type filters"功能等效的 IntelliJ Idea

arrays - 如何使用node.js在mongodb中插入文档数组?

php - PHP 中 "associate"和 "indexed"数组之间的实际区别是什么?

用于检查 URL 查询参数结尾的正则表达式

javascript正则表达式从字符串中选择[]中的文本

java - 如何使用 Java Regex 将特定字符串放入数组?

java - 即使启动新线程,SWT UI 也会挂起

java - 在提交时传递自定义对象

arrays - 有没有更好的方法让 numpy.argmin() 忽略 NaN 值

java - 如何在 Java 中用斜杠替换所有出现的除号?