我正在尝试制作一个简短的程序,将任何字符串转换为T H I S F O N T。
例如:“这是一个测试句子”变成“ T H I S I S A T E S T S E N T N C E””
我在StringBuilder
循环中有一个while
,但是使用finale.insert(i, '\t');
无效。
import java.util.Scanner;
public class Executable {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String x;
int i = 0;
System.out.print("Input text here: ");
x = input.nextLine();
StringBuilder finale = new StringBuilder(x.toUpperCase());
while(i > finale.length()) {
if(finale.substring(i, i) == " ") {
i += 2;
finale.insert(i, '\t');
}
}
System.out.println(finale);
}
}
有帮助吗?
答案 0 :(得分:1)
您说的是while i>finale.length()
,但是i
被初始化为0。您永远不会进入while循环。
答案 1 :(得分:1)
您的代码有一些问题。在介绍可行的实现之前,让我们看一下其他问题。
while
循环检查是否i > finale.length()
。由于i = 0
,while
循环再也没有机会开始。==
比较字符串,这是不正确的。 ==
用于确认两个对象是否相等,而不是两个字符串的值。您需要改用string.equals()
。for
循环可以很简单地完成目标。这是您可以使用的新循环,而不是您拥有的循环:
for (int i = 1; i < finale.length(); i++) {
finale.insert(i++, " ");
}
输出:T H I S F O N T
对于不熟悉for
循环的用户,以下是上述内容的结构非常简单的细分。
for
循环分为三个部分:
for (variable_to_increment; repeat_until_this_condition_is_met; modify_variable_on_each_iteration) {
// Code to be executed during each pass of the loop
}
int i = 1
。通过设置i = 1
,我们将跳过字符串中的第一个字符。i < finale.length()
表示我们要继续重复此循环,直到达到字符串的长度为止。例如,如果字符串的长度为5个字符,并且我们已经运行了4次循环,则i
现在等于5,并且不再小于字符串的长度,因此循环结束。i++
。这告诉Java在每个循环之后我们要对i
做什么。在这种情况下,我们希望每次循环重复时将值增加1。答案 2 :(得分:1)
您的代码存在一些问题(请参见内联注释):
import java.util.Scanner;
public class Executable {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String x;
int i = 0;
System.out.print("Input text here: ");
x = input.nextLine();
StringBuilder finale = new StringBuilder(x.toUpperCase());
while(i > finale.length()) { // this condition is incorrect. Initially
// this condition will always be false
// if you input some sentence. It should be
// i < finale.length()
if(finale.substring(i, i) == " ") { // here preferably you should use
// equals method to compare strings
i += 2;
// you are only incrementing the i if the ith
// substring equals " ". Firstly, substring(i,i)
// will return empty string because the second argument
// is exclusive
finale.insert(i, '\t');
}
}
System.out.println(finale);
}
}
如果您想使用其他方法(不是很理想)来完成您想做的事情,可以尝试以下方法:
import java.util.Scanner;
public class Executable {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String x;
int i = 0;
System.out.print("Input text here: ");
x = input.nextLine();
String finale = x.toUpperCase().replaceAll(" ","").replaceAll("", " ");
System.out.println(finale);
}
}
首先,将字符串转换为大写->然后删除单词之间的所有空格->然后在所有字母之间插入空格。这样做的代码行是
String finale = x.toUpperCase().replaceAll(" ","").replaceAll("", " ");
这是一个示例运行:
Input text here: This is a sentence
T H I S I S A S E N T E N C E
答案 3 :(得分:0)
您方法的正确方法是,只需递增,直到您的大小是初始String的两倍
while (i < x.length() * 2) {
finale.insert(i, '\t');
i += 2;
}
一个简单的方法是使用经典的for循环:
StringBuilder finale = new StringBuilder();
for (char c : x.toUpperCase().toCharArray()) {
finale.append(c).append('\t');
}
答案 4 :(得分:0)
使用for循环,因为您知道迭代次数:
Scanner input = new Scanner(System.in);
String x;
System.out.print("Input text here: ");
x = input.nextLine();
StringBuilder finale = new StringBuilder(x.toUpperCase());
int len = finale.length();
for (int i = 1; i < 2 * len; i+=2 ) {
finale.insert(i, '\t');
}
System.out.println(finale);
答案 5 :(得分:0)
您正在将字符串与==
进行比较。绝对不要那样做;改用equals
。
对于将来的读者:可以使用Java 8 Streams优雅地完成此工作:
String result = str.chars()
.filter(i -> i != ' ')
.mapToObj(t -> (char) t)
.map(Character::toUpperCase)
.map(Character::valueOf)
.collect(Collectors.joining(" ");