将用户代理字符串拆分为其各个部分



我以这种方式读取Java类中的userAgent:

String user_agent = req.getHeader("User-Agent");

并得到了这样的字符串:

Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0

我想将此字符串拆分为以下 4 个字符串:

  • Mozilla/5.0
  • (Windows NT 6.1; Win64; x64; rv:47.0)
  • Gecko/20100101
  • Firefox/47.0

之后,我想将第二个字符串分成另外 4 个字符串:

  • Windows NT 6.1
  • Win64
  • x64
  • rv:47.0

但是如果我使用这样的东西:

String [] array = user_agent.split(" ")

我会得到:

  • Mozilla/5.0
  • (Windows NT 6.1;
  • Win64;
  • x64;
  • rv:47.0)
  • Gecko/20100101
  • Firefox/47.0

除了有不需要的字符外,拆分后不要帮助单独保存每个部分。有没有办法根据空格分隔符拆分字符串,忽略括号内的内容?

下面是使用Stream的解决方案方法。希望它会有所帮助。

//split the first string
String str = "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0";
String[] result1 = str.split("[\(||\)]");
List<String> list0 = Arrays.stream(result1)
.collect(Collectors.toList());
String list1 = list0.get(list0.size()-1);
List<String> list2 = Arrays.stream(list1.split("\s"))
.collect(Collectors.toList());
list0.remove(list0.get(list0.size()-1));
Stream.of(list0,list2).flatMap(Collection::stream)
.filter(s -> !s.isEmpty())
.forEach(s -> System.out.println(s.trim()));
// then split second string into 4 others
String string = "Windows NT 6.1; Win64; x64; rv:47.0";
Arrays.stream(string.split(";"))
.forEach(s -> System.out.println(s.trim()));

最新更新