【问题标题】:Easiest way to remove trailing tab in a string in java在java中删除字符串中的尾随制表符的最简单方法
【发布时间】:2013-02-06 04:23:24
【问题描述】:

例如,如果您有一个制表符分隔值列表:

foo1\tfoo2\tfoo3\tfoo4\t

添加最后一个 \t 是因为每个 += 都会自动附加 \t

如何以简单的方式删除最后一个 \t?所以结果是:

foo1\tfoo2\tfoo3\tfoo4

作为 Hover 的请求,我所拥有的一个小例子:

String foo = "";
for (int i = 1; i <= 100; i++) {
    foo += "foo" + "\t";
    if (i % 10 == 0) {
        foo = foo.trim(); // wasn't working
        foo += "\n";
    }
}
System.out.println(foo);

输出(用字符串选项卡替换实际选项卡以在此处显示):

foo\tfoo\tfoo\tfoo\tfoo\tfoo\tfoo\tfoo\tfoo\tfoo\t
foo\tfoo\tfoo\tfoo\tfoo\tfoo\tfoo\tfoo\tfoo\tfoo\t
foo\tfoo\tfoo\tfoo\tfoo\tfoo\tfoo\tfoo\tfoo\tfoo\t
foo\tfoo\tfoo\tfoo\tfoo\tfoo\tfoo\tfoo\tfoo\tfoo\t
foo\tfoo\tfoo\tfoo\tfoo\tfoo\tfoo\tfoo\tfoo\tfoo\t
foo\tfoo\tfoo\tfoo\tfoo\tfoo\tfoo\tfoo\tfoo\tfoo\t
foo\tfoo\tfoo\tfoo\tfoo\tfoo\tfoo\tfoo\tfoo\tfoo\t
foo\tfoo\tfoo\tfoo\tfoo\tfoo\tfoo\tfoo\tfoo\tfoo\t
foo\tfoo\tfoo\tfoo\tfoo\tfoo\tfoo\tfoo\tfoo\tfoo\t
foo\tfoo\tfoo\tfoo\tfoo\tfoo\tfoo\tfoo\tfoo\tfoo\t

这就是我问这个问题的主要原因,.trim() 不起作用,因此,我坚持认为 trim() 不是为尾随制表符制作的。

【问题讨论】:

  • 请不要在循环中使用+= 来构建字符串。你基本上以二次运行时结束。
  • 只需在字符串上调用trim()
  • 使用 lastIndexOf 例如字符串 c = "foo1\tfoo2\tfoo3\tfoo4\t"; c=c.subString(0,c.lanstIndexOf("\t")-1);
  • 不,完全使用更好的方法。 stackoverflow.com/questions/1751844/…
  • "\t" 不是可以用 trim() 删除的空格

标签: java string formatting


【解决方案1】:
String s1 = "foo1\tfoo2\tfoo3\tfoo4\t".trim();

【讨论】:

  • “trim()”是否只删除“空白”?
  • @Henry trim() -> "返回一个字符串,其值为该字符串,删除所有前导和尾随空格。"
【解决方案2】:
String expectedString = "foo1\tfoo2\tfoo3\tfoo4\t".trim();

【讨论】:

    【解决方案3】:

    如果您只想删除尾随标签,您可以这样做:

    String s1 = "foo1\tfoo2\tfoo3\tfoo4\t";
    while (s1.endsWith("\t")) {
        s1 = s1.substring(0, s1.length()-1);
    }
    

    【讨论】:

    • +1 好主意 :) - 使用StringBuilder 可能会更好,因为这会产生很多小的Strings
    • 不错!!!我在找这个。谢谢!它消除了我使用其他方式遇到的异常。
    【解决方案4】:

    如果你的循环是这样的

    for(...){
         values += foo + number + "\t" 
    }
    

    你可以

    • 使用trim()
    • 使用 values.substring(0,values.length-1)
    • 修改您的循环以进行n-1 迭代并手动应用最后一部分而不使用选项卡
    • nth 迭代添加显式测试,而不应用“\t” (values += foo + (i==n-1)? numbers:numbers+"\t")

    【讨论】:

      【解决方案5】:

      HovercraftFullOfEels 是对的 String#trim 应该做你想做的...

      String testing = "foo1\tfoo2\tfoo3\tfoo4\t";
      System.out.println("\"" + testing.trim() + "\"");
      if (testing.endsWith("\t")) {
          testing = testing.substring(0, testing.lastIndexOf("\t"));
          System.out.println("\"" + testing + "\"");
      }
      

      哪些输出...

      "foo1   foo2    foo3    foo4"
      "foo1   foo2    foo3    foo4"
      

      更新

      如果失败...类似...

      StringBuilder sb = new StringBuilder(testing);
      while (sb.lastIndexOf("\t") == sb.length()) {
          sb.delete(sb.length() - 1, sb.length());
      }
      System.out.println("\"" + sb.toString() + "\"");
      

      可能会有所帮助...

      【讨论】:

        【解决方案6】:

        为了澄清我们的讨论,如果你运行这个,你会看到什么?

        public class Foo3 {
           public static void main(String[] args) {
              String foo = "";
              for (int i = 1; i <= 100; i++) {
                 if (i % 10 == 1) {
                    foo += "\"";
                 }
        
                 foo += "foo" + "\t";
                 if (i % 10 == 0) {
                    foo = foo.trim(); // wasn't working
                    foo += "\"\n";
                 }
              }
              System.out.println(foo);
           }
        }
        

        我自己,我明白了:

        “foo foo foo foo foo foo foo foo foo foo” “foo foo foo foo foo foo foo foo foo foo” “foo foo foo foo foo foo foo foo foo foo” “foo foo foo foo foo foo foo foo foo foo” “foo foo foo foo foo foo foo foo foo foo” “foo foo foo foo foo foo foo foo foo foo” “foo foo foo foo foo foo foo foo foo foo” “foo foo foo foo foo foo foo foo foo foo” “foo foo foo foo foo foo foo foo foo foo” “foo foo foo foo foo foo foo foo foo foo”

        展示了一个运行良好的 trim() 方法。

        【讨论】:

          猜你喜欢
          • 2011-05-22
          • 1970-01-01
          • 2011-08-12
          • 2015-04-03
          • 2015-06-19
          • 2012-11-27
          • 1970-01-01
          • 2021-08-13
          相关资源
          最近更新 更多