Java字符到String

时间:2014-10-27 15:35:03

标签: java java-6

我尝试了多个版本,包括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();
    }

}

3 个答案:

答案 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。