在java中删除字符串中尾部制表符的最简单方法

在java中删除字符串中尾部制表符的最简单方法,java,string,formatting,Java,String,Formatting,例如,如果您有选项卡分隔值列表: 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.t

例如,如果您有选项卡分隔值列表:

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);

这就是我问这个问题的主要原因,.trim()不起作用,因此,我认为trim()不是为尾部选项卡制作的。

如果您只想删除尾部选项卡,可以执行以下操作:

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

如果你的循环看起来像这样

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

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

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() + "\"");

可能有助于…

澄清我们的讨论,如果您运行此程序,您会看到什么

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);
   }
}
公共类Foo3{
公共静态void main(字符串[]args){
字符串foo=”“;

对于(int i=1;i Please,请不要在循环中使用
+=
来构建字符串。基本上,您最终得到的是二次运行时。只需对字符串调用
trim()
。使用lastIndexOf,例如string c=“foo1\tfoo2\tfoo3\tfoo4\t”;c=c.subString(0,c.lanstIndexOf(“\t”)-1);不,使用更好的方法。“\t”不是一个可以用trim()删除的空格+1好主意:)-但是使用
StringBuilder
可能会更好,因为这样会创建很多小
字符串
snice!!!我正在寻找这个。谢谢!它消除了我用其他方法得到的异常。“trim()”是否只删除“空白”?@Henry
trim()
->“返回一个值为该字符串的字符串,并删除所有前导和尾随空格。”
StringBuilder sb = new StringBuilder(testing);
while (sb.lastIndexOf("\t") == sb.length()) {
    sb.delete(sb.length() - 1, sb.length());
}
System.out.println("\"" + sb.toString() + "\"");
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"