![](/img/trans.png)
[英]How do you convert string arraylist to double using for loop to calculate?
[英]How do you double each letter in a string using a for loop and an if statement in java
我需要使用for循环和if-then语句将字符串中的每个字母加倍。 如何梳理字符串并测试每个字符是字母还是符号(例如感叹号)? 然后将字符串打印出来,每个字母加倍,每个感叹号加倍。
到目前为止,这就是我所拥有的。 它尚未完成,根本无法使用,但是我走在正确的轨道上吗?
import java.util.Scanner;
public class DoubleLetters{
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
System.out.println("Enter a sentence:");
String sentence = scan.nextLine();
boolean isLetter = false;
for (int i = 0; i < sentence.length(); i++){
isLetter = Character.isLetter(sentence.charAt(i));
if (i == sentence.length() || sentence.charAt(i) == ' ' || isLetter == false){
System.out.print(sentence.charAt(i) + sentence.charAt(i));
}
}
看来您走的路正确,然后通过正确的出口,然后走错路。
for (int i = 0; i < sentence.length(); i++){ [...] }
是迭代字符串字符的正确方法。
Character.isLetter(c)
是检查字符是否为字母的正确方法。
但是,您的情况很混乱:
我认为您的情况应该只是
if (isLetter) { /* print twice */ }
else if (isExclamationPoint) { /* print "thrice" */ }
else { /* print once */ }
尝试这个:
import java.util.*;
public class DoubleLetters{
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
System.out.println("Enter a sentence:");
String sentence = scan.nextLine();
StringBuilder sb = new StringBuilder();
for (Character c: sentence.toCharArray()){
sb.append(c);
if(Character.isLetter(c)){
sb.append(c);
}
else if(c == '!'){
sb.append(c).append(c);
}
}
sentence = sb.toString();
System.out.println(sentence);
}
}
在处理这样的字符串时,最好使用StringBuilder
,它会分配给定大小的连续字符缓冲区。 您可以计算输出String
需要多大,然后在构造时将此大小传递给StringBuffer
。
我还建议您继续调用String.charAt
以获得最大效率。
您可能还希望将例程封装在一个函数中。 您可以将输入作为CharSequence
获得最大效用。
public class DoubleLetters {
private static int getRepetitionCount(char c) {
if (Character.isLetter(c)) {
return 2;
} else if (c == '!') {
return 3;
} else {
return 1;
}
}
public static String doubleLetters(CharSequence in) {
int inLength = in.length();
int outLength = 0;
for (int i = 0; i < inLength; ++i) {
outLength += getRepetitionCount(in.charAt(i));
}
StringBuilder out = new StringBuilder(outLength);
for (int i = 0; i < inLength; ++i) {
char c = in.charAt(i);
int reps = getRepetitionCount(c);
for (int r = 0; r < reps; ++r) {
out.append(c);
}
}
return out.toString();
}
public static void main(String[] args) {
String test = "hello! world!";
System.out.print(doubleLetters(test));
}
}
在这种情况下,您可以选择分配一个大小为3 * inLength
的缓冲区,该缓冲区的大小足以容纳任何潜在的输出字符串。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.