【问题标题】:how to remove last symbols? [duplicate]如何删除最后一个符号? [复制]
【发布时间】:2017-12-01 07:18:47
【问题描述】:
List<String> solList = new ArrayList<String>( );
solList.add( "num1" );
solList.add( "num2" );

StringBuilder result = new StringBuilder();
for ( String a : solList )
{
result.append( a ).append( ", " );
}

String withoutLastComma = result.substring( 0, result.length( ) - ", 
".length( ) );
System.err.println( withoutLastComma );

我想删除最后一个逗号,我使用子字符串,我怎样才能使这段代码变得更好?

使用字符串实用方法(例如“StringUtil.join”)连接数组或集合对象中的元素。请参阅“StringUtil API 的 StringUtil.join”条目。

例如: StringUtils.join(["e", "f", "g"], "--") // =&gt; "e--f--g

【问题讨论】:

  • 如果您只想添加逗号,请使用长度为 -2 的简单 for 循环
  • 你可以用String.join做任何事情
  • 你可以做result.setLength(result.length() - 1)。或者,不是使用简单的for 循环,您可以获取solList.iterator() 并“手动”循环它(while (iterator.hasNext()) { ...),这样您就可以在循环中检查是否有下一个元素——这样您就可以如果您在最后一个元素,请不要添加逗号开头。 (或者,正如 ajb 指出的那样,使用为您执行此操作的库调用。)
  • 要删除最后一个, ,请执行result.delete(result.length()-2,result.length());
  • @JaySmith 请注意,他在每个元素之间附加了两个字符——逗号和空格——因此您的代码将删除最后一个空格,但不会删除逗号。

标签: java string


【解决方案1】:

以下是获取逗号分隔列表的一种方式:

StringBuilder result = new StringBuilder();
int size = 0;
if(solList!=null && (size=solList.size())>0)
{
   result.append(solList.get(0));
   for ( int i=1;i<size;i++ )
   {
        result.append( ", " ).append(solList.get(i));
    }
 }

【讨论】:

  • 唯一的缺陷是它不能处理空列表。
  • 感谢您的 cmets
  • 使用if (!solList.isEmpty()) 对其进行修补,使其适用于空列表。虽然这不是一个非常漂亮的解决方案,但它确实有效。
  • 感谢您的 cmets。我更新了我的解决方案。
【解决方案2】:

有很多方法可以做到这一点。 Java 8 已经在 String 中提供了一个 join 方法,该方法将连接列表或数组中的字符串,每对元素之间有一个固定字符串。

这是另一种方式。我将其作为答案包括在内,因为它在其他数组/列表遍历情况下很有用,不一定涉及字符串和分隔符:

StringBuilder result = new StringBuilder();
boolean first = true;
for ( String a : solList )
{
    if (!first) {
        result.append(", ");
    }
    result.append(a);
    first = false;
}

我不会在这里使用它,但这种模式在很多情况下都会出现。

这与丹尼斯的回答基本相同,只是表达方式略有不同。

【讨论】:

    【解决方案3】:

    以逗号分隔的字符串列表 Using java 8String.join()

    逻辑 1:

    import java.util.Arrays;
    import java.util.List;
    
    public class TestApp2 {
    
        public static void main(String[] args) {
    
            List<String> list = Arrays.asList("A", "B", "C", "D");
    
            String result = String.join(",", list);
            System.out.println(result);
        }
    
    }
    

    输出:

    A,B,C,D
    

    逻辑 2:

    StringJoiner 可用于使用 Collectors.joining(CharSequence) 从 Stream 创建格式化输出。例如:

     List<Integer> numbers = Arrays.asList(1, 2, 3, 4);
     String commaSeparatedNumbers = numbers.stream()
         .map(i -> i.toString())
         .collect(Collectors.joining(", "));
    

    输出:

    1,2,3,4
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多