计数字符串中的字符不适用于制表符 ('\t')。我使用错误的方法吗?

Counting chars in String doesn't work with tabs ('\t'). Am I using wrong methods?

我想计算字符串中的每个字符。每个字符向计数器加 1,制表符应加 4。

我的代码是:

int counter = 0;
for(char c : myString.toCharArray()) {
    if("\t".equals(""+c)) {
        counter = counter + 4;
    } else {
        counter++;
    }
}

我在文本编辑器中制作了很多不同的行,并将选项卡 space 设置为 4。 带有字符和数字的行没有问题。只要我在中间添加几个制表符,结果总是大 1。我的编辑器说该行长 100 个字符,但我的代码计数为 101。一行中有 2 个或 20 个制表符并不重要。它总是 1 太多了。

有什么想法或更好的解决方案吗?也许使用的方法导致了这种行为?

编辑: 我的测试线:

Line 12: 121 characters ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
Line 13: 120 characters dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
Line 14: 119 characters with tabs                                                                                   kkk
Line 15: 120 characters with tabs                                                                                   lkkk

我的代码准确计算 'Line 12' 的 121 个字符和 'Line 13' 的 120 个字符。 'Line 14' 为 120 个字符,'Line 15' 为 121 个字符。我不知道为什么。换行符被忽略。

对于简单的字符串

运行很好

package test;


public class Test {

    public static void main(String[] args) {
        int counter = 0;
        String myString = "aghfhg\n     \n";
        for (char c : myString.toCharArray()) {
            if ("\t".equals("" + c)) {
                counter = counter + 4;
            } else {
                counter++;
            }
        }
        System.out.println(counter); // output is 13 including 1 space , 1 tab and 2 line characters
    }
}

请提供您的字符串

好吧,我复制了你的代码并执行了一次,我没有发现任何错误。

我尝试了以下代码:-

import java.util.Scanner;
   public class Alpha{
   public static void main(String[] args){
         int counter = 0;
         Scanner s= new Scanner(System.in);
         System.out.println("Enter a String :- ");
         String myString=s.nextLine();
            for(char c : myString.toCharArray()) {
               System.out.println(c);
               if("\t".equals(""+c)) {
                 counter = counter + 4;
               } 
               else {
               counter++;
               }
             }
          System.out.println("Counter="+counter);
          }
         }

而且,我每次都收到正确的输出。

SAMPLE OUTPUT RECEIVED :-

Ram is/t              //  Comment---> /t represents tab-hit after "is" word

R
a
m

i
s

Counter=10

所以,对我来说,它的评估是正确的。请检查您的输入(line-feeds/carriage-returns 是否也被计算在内)。祝你好运。