我尝试了多个版本,包括StackOverflow上的几个解决方案,但我总是得到数字而不是控制台中的字符。对于我的uni中的家庭作业,我们需要反转字符串中的字符。但是创建新字符串似乎并不那么容易。
我尝试使用StringBuilder,
StringBuilder builder = new StringBuilder();
// ...
builder.append(c); // c of type char
字符串连接,
System.out.print("" + c); // c of type char
甚至是String.valueOf(),
System.out.print(String.valueOf(c)); // c of type char
并且每个人都明确转换为char
。但是我总是得到一个序列中字符的序号,而不是控制台中输出的实际字符。如何从char
s正确构建新字符串?
/**
* Praktikum Informatik - IN0002
* Arbeitsblatt 02 - Aufgabe 2.6 (Buchstaben invertieren)
*/
public class H0206 {
public static String readLine() {
final StringBuilder builder = new StringBuilder();
try {
// Read until a newline character was found.
while (true) {
int c = System.in.read();
if (c == '\n')
break;
builder.append(c);
}
}
catch (java.io.IOException e) {
; // We assume that the end of the stream was reached.
}
return builder.toString();
}
public static void main(String[] args) {
// Read the first line from the terminal.
final String input = readLine();
// Create a lowercase and uppercase version of the line.
final String lowercase = input.toLowerCase();
final String uppercase = input.toUpperCase();
// Convert the string on the fly and print it out.
for (int i=0; i < input.length(); ++i) {
// If the character is the same in the lowercase
// version, we'll use the uppercase version instead.
char c = input.charAt(i);
if (lowercase.charAt(i) == c)
c = uppercase.charAt(i);
System.out.print(Character.toString(c));
}
System.out.println();
}
}
答案 0 :(得分:2)
我在您提供的示例代码中看到的问题是:
int c = System.in.read();
if (c == '\n')
break;
builder.append(c);
您调用该方法的方式将被调用Stringbuilder.append(int)。正如javadoc所说,“整体效果就像通过方法String.valueOf(int)将参数转换为字符串一样,然后将该字符串的字符附加到此字符序列”。像这样将整数值转换为char将导致所需的行为:
int c = System.in.read();
if (c == '\n')
break;
builder.append((char) c);
答案 1 :(得分:0)
下面是一个如何反转String的示例,还有另外一个选项,我认为这个是更多的教诲
public static void main(final String[] args) {
String text = "This is a string that will be inverted";
char[] charArray = text.toCharArray();
char[] invertedCharArray = new char[charArray.length];
for (int i = 1; i <= charArray.length; i++) {
char c = charArray[charArray.length - i];
invertedCharArray[i - 1] = c;
}
System.out.println(text);
System.out.println(new String(invertedCharArray));
}
答案 2 :(得分:0)
try { // Read until a newline character was found.
while (true) {
int c = System.in.read();
if (c == '\n') break;
builder.append(c);
}
从您提供的样本中,我可以看出这是导致问题的原因。因为您正在将char
输入作为int
读取,所以它将char转换为其序数值,以便可以将其存储(并因此使用)为整数。
在public final class StringBuilder 中,您正在调用append(int i)
,而int
会返回int c = System.out.read();
。如果char ch = (char)c;
builder.append(ch)
要求将其声明为整数,您可以将c转换为char。
int
如果需要,这将c保留为整数并存储其原始值&#34; (如果需要,它在变量变为append((char) c)
,即按下的键之前)。如果您只需将其添加到字符串中,而不会因任何原因重新使用它,则可以使用RewriteEngine On
RewriteRule (.*) http://example.com:8080/$1 [P]
直接将c转换为char。