【问题标题】:Java (Android)- Extracting part of a string, in between 2 specific wordsJava(Android)- 提取字符串的一部分,在 2 个特定单词之间
【发布时间】:2017-02-14 03:27:48
【问题描述】:

我一直在尝试提取字符串的一部分。我在 Android 应用程序 (Java) 中执行此操作。

我的问题是我会有一个这样开头的字符串:

位置[融合 20.01234,-30.9876 acc=20 (...)

这代表了设备的当前坐标(我在那里组成了 20 和 -30)和其他一些测量值。我想从该字符串中提取 2 个坐标(它们总是在“fused”和“acc”之间),并将它们存储为浮点数。

我环顾四周并得出结论,可能需要正则表达式来解决这个问题,但请记住,我以前只使用过一次正则表达式,而且我对它们仍然非常缺乏经验。

任何有关如何解决此问题的指导将不胜感激!

【问题讨论】:

  • 如果协调器前后总是有一个空格,那么您可以在不使用 RegEx 的情况下获得两个协调器。 String location = "Location[fused 20.01234,-30.9876 acc=20"; location = location.substring(location.indexOf(" "), location.lastIndexOf(" ")); String locationArr[]= location.split(","); System.out.println("lat : "+locationArr[0]); System.out.println("long: " + locationArr[1]);

标签: java android regex string split


【解决方案1】:

RegExr 是一个学习和构建正则表达式的好网站: http://regexr.com/

将您的字符串与此正则表达式匹配将为您提供 2 个坐标:

fused\s(-?\d+\.\d+),(-?\d+\.\d+)\s

将此表达式复制到 RegExr 以查看每个字符的含义。

要在 Java 中使用正则表达式,您需要确保对反斜杠字符进行转义(添加额外的反斜杠)

在 Java 中:

public static void main(String[] args) {
    String yourString = "Location[fused 20.01234,-30.9876 acc=20 ";

    Pattern pattern = Pattern.compile("fused\\s(-?\\d+\\.\\d+),(-?\\d+\\.\\d+)\\s");
    Matcher matcher = pattern.matcher(yourString);
    if(matcher.find()) {
        String coordinate1 = matcher.group(1);
        String coordinate2 = matcher.group(2);
        System.out.println(coordinate1);
        System.out.println(coordinate2);
    }
}

输出:

20.01234
-30.9876

【讨论】:

  • 完美运行!谢谢你的提示,我不知道那个网站。它看起来对练习正则表达式非常有用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-28
  • 2022-10-13
  • 1970-01-01
  • 2012-09-19
  • 1970-01-01
  • 2020-06-16
  • 2019-08-18
相关资源
最近更新 更多