【问题标题】:How to do the opposite of StringBuilder append in Java?如何在Java中做与StringBuilder append相反的事情?
【发布时间】:2012-09-10 14:00:09
【问题描述】:

什么是相反的:

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

我有一个列表,每次用户单击复选框时我都会添加行星的名称,如果清除该复选框,我想从 savePlanets 中删除名称

【问题讨论】:

  • 删除。美妙的是你可以声明你想要它是什么......也许 destroyPlanet() :)
  • savedPlanets 是一个字符串。我将如何实现一组数据?
  • 如果 savedPlanet 是字符串,用空字符串替换即可
  • @Randy 我该如何实现呢?我无法清空字符串,因为我需要其他值
  • 创建一个新的行星类。 addPlanet、RemovePlanet.. 等的创建方法还包括 toString() 以获取您要在此处创建的字符串。

标签: java


【解决方案1】:

您可以执行以下操作:

 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

【讨论】:

  • 好主意。但实际上这想成为某种地图或集合。那么这个字符串就是一个toString函数的返回值。
  • 我不会自己构建字符串,而是使用字符串/集合实用程序库(Guava 的 Joiner 或 Commons StringUtils),它采用类似的方法,但不使用子字符串复制字符串对象,并且使用的分隔符灵活(阅读:更高的重用)
【解决方案2】:

我每次都会重建字符串,只包含你想要包含的元素。

例如

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

【讨论】:

  • 不错的方法。 Apache Commons StringUtils 很灵活,可以很好地处理这个问题,Guava 的 Joiner 库也是如此。我倾向于在任何规模的项目中使用它们。例如,StringUtils 优化了 StringBuilder 的初始大小并优雅地处理空值。
【解决方案3】:

我认为您正在使用 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");

【讨论】:

    【解决方案4】:

    假设... StringBuffer savedPlanets...

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

    追加的相反: savedPlanets.replaceAll(planet.getDisplayName()+",","");

    前:

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

    现在savedPlanetes= "Earth,Mercury,Venus,";

    然后

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

    现在的值将是 savedPlanetes= "Earth,Mercury,";

    【讨论】:

      猜你喜欢
      • 2018-06-16
      • 1970-01-01
      • 1970-01-01
      • 2018-07-15
      • 2020-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多