【问题标题】:Removing specific parts of string without knowing exactly what to remove在不确切知道要删除什么的情况下删除字符串的特定部分
【发布时间】:2014-01-02 09:34:58
【问题描述】:

在我的地图应用程序中,我允许用户添加自定义标记。这会将 lat、long 和他们选择的标题保存到 Shared Prefs。 示例字符串

23.5678,18.0987,My Custom Marker_10.45567,56.37439,My Second Custom Marker_-10.45567,-56.37439,My Third Custom Marker

长按标记后,它变为可拖动的。用户将它拖到一个新位置并放开它。放手后,他们有三个选择……移到这里、取消和删除标记​​p>

我可以移动和取消就好了。当想要删除标记时,我需要 Lat、Lon、Title 才能使用 .replace()。但是,当一个标记被长按以启动拖动时,新的坐标被绑定到它,唯一保持不变的是标题。此外,坐标长度可能会有所不同,所以这限制了我的选择。 所以,我需要使用上面的字符串,并删除一组仅使用标题的 lat,lon,title 项。

示例:用户长按标记 2(10.45567,56.37493,我的第二个自定义标记),然后决定要删除它。我需要删除字符串的那部分,并保留其余部分。另请注意,下划线分隔每个标记信息,逗号分隔坐标和标题名称。因此,如果要删除第一个标记,则也需要删除第二个标记的下划线。

【问题讨论】:

  • 你的意思是如果我想删除(10.45567,56.37493,My Second Custom Marker)那么我必须留下23.5678,18.0987,My Custom Marker_-10.45567,-56.37439,My Third Custom Marker
  • 是的,先生,没错,​​但请记住,我们只能使用标题 EG:我的第二个自定义标记来识别整个部分。此外,如果它是第一个标记,则开头不会有下划线要删除,但它会与所有其他标记一起出现。

标签: android string replace substring trim


【解决方案1】:

这个方法可以做到。

您的查询结果是:

res = 23.5678,18.0987,My Custom Marker_-10.45567,-56.37439,My Third Custom Marker

请注意,这段代码根本没有效率。有很多分配和未优化的搜索。

static private String remove(String title, String data) {
    String result = "";
    String[] markers = data.split("\\_");
    for( String marker : markers) {
        String[] parts = marker.split(",", 3); // 3: limit the number of splits, in case you have commas in the title
        if(parts[2].equals(title)) {
            continue;
        }
        if(result.length() > 0) {
            result+='_';
        }
        result += marker;
    }
    return result;
}

【讨论】:

  • 是的,这行得通,我也成功了一半!将此标记为答案,谢谢我的朋友。快乐编码:)
猜你喜欢
  • 2013-03-24
  • 1970-01-01
  • 2015-10-05
  • 2014-07-03
  • 2017-02-12
  • 2019-11-20
  • 2013-05-10
相关资源
最近更新 更多