我从一些 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/