为什么键盘输入的超级 Unicode 字符串在传递给方法后会发生变化?

Why does a keyboard-entered super Unicode string change after being passed to a method?

提问人:Ken.Zhang 提问时间:5/16/2023 最后编辑:Ken.Zhang 更新时间:5/16/2023 访问量:44

问:

为什么调用 func(str2) 后 Scanner(System.in) 输入的字符串“🍷Hello”打印不正确?

java代码如下:

package test;
import java.util.Scanner;

public class TestCodePoint
{
    private static void func(String str)
    {
        System.out.println("after: " + str);
    }

    public static void main(String[] args)
    {
        String str = "🍷Hello";
        System.out.println("before: " + str);
        func(str);
        System.out.print("Please input a string: ");
        Scanner sc = new Scanner(System.in);
        String str2 = sc.next();
        System.out.println("str2_before: " + str);
        func(str2);
    }
}

实施的结果是:

before: 🍷Hello
after: 🍷Hello
Please input a string: 🍷Hello   (Here is the paste input)
str2_before: 🍷Hello
after: ��Hello

为什么最后一个的输出是“Hello”而不是“🍷Hello”?

java.util.scanner 代理项对

评论

0赞 maloomeister 5/16/2023
这与将变量传递给方法无关。您在这里有一个错别字/错误:应该在哪里.然后你会看到,实例返回的已经是“不正确的”,而不仅仅是方法返回的最后一个输出。System.out.println("str2_before: " + str);strstr2str2Scanner
2赞 Just another Java programmer 5/16/2023
您运行的 shell 可能不是 unicode
0赞 Ken.Zhang 5/16/2023
感谢 “maloomeister” 和 “Just another Java programmer” 的回答。问题应该正是你所指出的。

答: 暂无答案