我有一个JavaFX textField,可以从中获取字符串输入。我正在使用toCharArray()将字符串作为char数组传递。但是由于某些无法解释的原因,数组的长度出现在数组之后。任何想法可能是什么原因造成的?我希望输入为16个元素,所以我很难对其进行编码,但是由于某种原因,我得到的结果是18个元素,最后两个元素为1、6。(当我更改输入长度时,后面的两个元素紧随其后)。现在我知道用Java的bug来称呼它是愚蠢的,因此问题就在我的头上,但是对于我自己的一生,我无法弄清楚吗?
public class something extends Application {
String input;
char[] chars;
public void start(Stage primaryStage) {
TextField field = new TextField("Enter");
input = field.getText();
Button btn = new Button("Check");
btn.setOnAction(e -> validator(input));
}
public void validator(String input) {
chars = new char[input.length()];
System.out.println(input.length()); // this still shows 16
if (chars.length == 16) {
chars = input.toCharArray();
}
for (int i = 0; i < chars.length; i++){
System.out.print(chars[i]);
} //here the problem occurs, when I try to print the array
System.out.println(chars.length); //this also shows 16
if (chars[0] == '4'){
System.out.println("yayy");
check(input);
}
else {
// shows an alert
}
}
}
public void check(String str){
// some other code that works properly
}
public static void main(String[] args) {
Application.launch(args);
}
答案 0 :(得分:3)
请注意,每个字符都印有print
,而不是println
。
for (int i = 0; i < chars.length; i++){
System.out.print(chars[i]);
}
System.out.println(); // To a new line
System.out.println(chars.length); //this also shows 16
答案 1 :(得分:0)
首先,Java不会将数组的长度附加到数组中。 String.toCharArray
也没有。因此,无论您看到什么,都不是解释。
另一方面,由于您没有向我们提供实际的输入和输出,因此我无法解释确切的情况是什么。
即使如此,代码中也存在明显的误解
首先,该语句没有做任何有用的事情:
chars = new char[input.length()];
为什么?因为
chars = input.toCharArray();
将返回一个全新的数组。它不会填充您先前分配的字符数组。 (作业将替换它...)
第二个误解是:
if (chars[0] == 4){
....
}
尚不清楚您期望测试做什么,但是没有测试字符“ 4”。它正在测试Unicode代码点\ u0004 ...,它是ASCII EOT
控制字符,或典型西方键盘上的CNTRL-D
。
简而言之,验证是可能没有测试您的期望。 (您为什么希望用户输入控制字符?)
要测试字符“ 4”,请使用字符文字。单引号。
if (chars[0] == '4'){
....
}