如何在Java中执行与StringBuilder append相反的操作?

3

什么是以下问题的相反方向:

savedPlanets.append(planet.getDisplayName()+",");

我有一个列表,每次用户点击复选框时,我都会添加行星的名称。如果清除复选框,则希望从savedPlanets中删除名称。


移除。美妙之处在于你可以声明你想要它成为什么..也许是destroyPlanet() :) - Randy
savedPlanets是一个字符串。我该如何实现一组数据? - fasheikh
如果savedPlanet是一个字符串,只需将其替换为空字符串。 - hndr
@Randy,我该如何实现它?我不能清空字符串,因为我需要其他的值。 - fasheikh
创建一个名为Planets的新类。创建addPlanet、RemovePlanet等方法。还要包括toString()方法以获取您要创建的字符串。 - Randy
单个字符子集:https://dev59.com/enA75IYBdhLWcg3wP2kg - Ciro Santilli OurBigBook.com
4个回答

3
你可以做以下事情:
 savedPlanets.replace(planet.getDisplayName(),"");

理想情况下,我会采用以下方案:
Set<String> selectedPlanets = new HashSet<String>();

selectedPlanets.add(planet.getDisplayName());        // Whenever a planet is selected
selectedPlanets.remove(planet.getDisplayName());     // Whenever a planet is removed 

// Prepare a String with all planets        
StringBuilder savedPlanets = new StringBuilder("");
for(String planetName : selectedPlanets ){
    savedPlanets.append(planetName).append(",");
}
// Removing , from the end if any       
if(savedPlanets.toString().endsWith(","))
    finalValue = savedPlanets.substring(0, savedPlanets.length()-1);

// finalValue is what you are looking for

1
不错的想法。但实际上这需要是一个地图或某种集合。然后字符串是toString函数的返回值。 - Randy
与其自己构建字符串,我会使用一个字符串/集合实用库(如Guava的Joiner或Commons StringUtils),它们采用类似的方法,但不通过使用子字符串来复制字符串对象,并且在使用分隔符时更加灵活(即:更高的重用性)。 - Tom Hartwell

1

我会每次重新构建字符串,只包含您想要包含的元素。

例如:

Set<Planet> planets = ...
StringBuilder sb = new StringBuilder();
String sep = "";
for(Planet planet: planets) {
   sb.append(sep).append(planet.getDisplayName());
   sep = ",";
}
String planetNames = sb.toString();

2
不错的方法。Apache Commons StringUtils非常灵活,能够很好地处理这个问题,Guava的Joiner库也是如此。在任何规模的项目中,我都会倾向于使用它们。例如,StringUtils优化了StringBuilder的初始大小,并且能够优雅地处理null值。 - Tom Hartwell

0

我认为你正在使用StringBuffer或类似的东西。在这种情况下,这不是一个好的解决方案,我建议你使用Set。http://docs.oracle.com/javase/6/docs/api/java/util/Set.html

像这样实现:

Set planets = new HashSet();
planets.add("a");
planets.add("b");
planets.remove("a");

0

假设...

APPEND:savedPlanets.append(planet.getDisplayName()+",");

APPEND的反义词:savedPlanets.replaceAll(planet.getDisplayName()+",","");

示例:

savedPlanets.append("Earth,");
savedPlanets.append("Mercury,");
savedPlanets.append("Venus,");

现在 savedPlanetes = "地球,水星,金星,";

然后

savedPlanets.replaceAll("Venus,",""); <-----

现在的值将会是savedPlanetes= "地球,水星,"


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接