2013-12-14 58 views
0

在我的地图应用程序中,我允许用户添加自定义标记。这将经纬度,长度和他们选择的标题保存到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 

长按一个标记后,它变为可拖动。用户将其拖到新位置并放开。一旦放手,他们有三个选项...移动到这里,取消和删除标记

我可以移动并取消就好了。当想要删除标记时,我需要Lat,Lon,Title来使用.replace()。但是,当一个标记被长时间按下来启动一个拖拽时,新的坐标与它相关联,唯一保持不变的是标题。此外,坐标长度可能会有所不同,所以这种限制我的选择。 所以,我需要采取上面的字符串,并使用只有标题删除一组lat,lon,标题项目。

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

+0

你的意思是,如果我想删除'(10.45567,56.37493,我的第二个自定义标记)'然后我必须留下'23.5678,18.0987,我的自定义Marker_-10.45567,-56.37439,我的第三个自定义Marker'? –

+0

是的,先生,确切地说,但请记住,我们只能使用标题EG来标识整个部分:我的第二个自定义标记。另外,如果它的第一个标记,在开始删除时不会有下划线,但它将与所有其他标记一起出现。 – jb15613

回答

2

这种方法将做到这一点。

您所查询的结果是:

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; 
} 
+0

是的,这工作,我也在那里的一半!将此标记为答案,谢谢我的朋友。快乐编码:) – jb15613