在Java中,字符串中的字母如何加倍?

时间:2014-10-29 21:51:44

标签: java

无论你怎么看,我都是初学者,所以请耐心等待。该项目是在代码中有一个字符串,然后将其中的每个字母加倍,同时将感叹号增加三倍。没有其他东西加倍。它应该采取这样的方式:

  

快速的棕色狐狸跳过懒狗3次!

...并把它变成这个:

  

Tthhee qquuiicckk bbrroowwnn ffooxx jjuummppss oovveerr tthhee llaazzyy ddoogg 3 ttiimmeess !!!

这是我试过的代码,虽然它以数字打印并且需要一堆循环来完成而不是一个:

String s = "The quick brown fox jumps over the lazy dog 3 times!";
String output = "";
int i = 0;
while (i < s.length()) {
    char c = s.charAt(i);
    if (s.charAt(i) == '!') {
        output += c + c + c;
        i++;
    }
    if (Character.isLetter(c) == true) {
        output += c + c;
        i++;
    } else {
        i++;
    }
    System.out.println(output);
}

8 个答案:

答案 0 :(得分:2)

你真的应该使用StringBuilder,但char + char会产生char而非String(它会添加数字)。您可能需要output += "" + c + c + c;,因为它会将char转换为String,然后附加它们。 (同样适用于行output += c + c;

答案 1 :(得分:1)

干净的解决方案可能如下所示:

String s = "The quick brown fox jumps over the lazy dog 3 times!";
StringBuilder sb = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
    char c = s.charAt(i);
    if (c == '!') {
        sb.append(c).append(c).append(c);
    } else if (Character.isLetter(c)) {
        sb.append(c).append(c);
    } else {
        sb.append(c);
    }
}
String output = sb.toString();
System.out.println(output);

它修复的问题

  • 您的代码在遇到'!'后会跳过该字符。您进入第一个if,增加i正确,但随后返回到下面的其余代码,点击下一个if,条件为false,因为!不是一封信,所以它会进入else路径并再次增加i。您应该使用continue来防止掉线或使用强制互斥流量的if .. else if .. else
  • while循环是IMO比for循环更难阅读。您也不必像i那样增加3次。一旦在while循环结束就足够了。
  • 循环中的字符串连接最好使用StringBuilder完成。它还可以附加char而不将其转换为数字。
  • 您忘了在没有特殊情况时必须附加c一次。
  • 你不想在循环中做System.out.println(output);但之后。这就是为什么你看到比预期更多的输出线的原因
  • 格式化隐藏问题,如上面的问题

答案 2 :(得分:1)

String s = "The quick brown fox jumps over the lazy dog 3 times!";

    StringBuilder builder = new StringBuilder();

    for (int i = 0; i < s.length(); i++) {
        char temp = s.charAt(i);

        builder.append(temp);

        if (Character.isLetter(temp)) {
            builder.append(temp);
        } else if (temp == '!') {
            builder.append(temp).append(temp);
        }
    }

    System.out.println("Result: " + builder.toString());   

答案 3 :(得分:0)

您应该首先通过所谓的演员

将数字转换回字符

like(char)output。

尝试并使用它,学习和实验是一个开始的最好的事情; - )

希望它有所帮助。

答案 4 :(得分:0)

使用StringBuilder提供简短明了的解决方案:

String s = "The quick brown fox jumps over the lazy dog 3 times!";
StringBuilder sb = new StringBuilder();
for (int i=0 ; i<s.length() ; i++) {
    String ch = s.charAt(i) + "";
    sb.append(ch.matches("\\s") ? ch : ch + ch);
}
System.out.println(sb.toString());

答案 5 :(得分:0)

字符是表示实际英文字符的数字。添加两个字符将只为您提供一个新数字,该数字将代表一些新字符

使用StringBuilder课程来完成您的工作。

答案 6 :(得分:0)

这段代码对我来说很好......

    String s = "The quick brown fox jumps over the lazy dog 3 times!";
    String output = "";
    int n = s.length();
    for(int i = 0; i<n; i++){
        String sub = s.substring(i, i+1);
        output = output + sub + sub;
    }
    System.out.println(output);

答案 7 :(得分:0)

而不是打印字符串我认为你正在做的是打印与每个字符相加的数字。

在您的串联中添加"",即output+= "" + c + c;

但是请确保在添加字符之前添加空字符串,否则它会将字符添加到一起,为您提供一个数字,然后将其转换为字符串。

此外,在您的其他声明中,您可能需要添加output+= c行,否则您将失去3号和空格。