私はしばらくこのことを理解しようとしていましたが、うまく動作するようにはできません。基本的に私はJavaFX TextAreaを持っていて、入力の最後の行(つまり、ENTERキーが押された後の上の行の上の行)でCommandWrapperという名前の新しいObjectを作成したいとします。私はそれが完璧に動作しますが、私は以下のGIFに示したいかなるコマンド灰を入力しない場合、何らかの理由で私のstring.Split()関数に文句を言わない空行を取得するコマンドを入力後にEnterを打つたび:JavaFX TextAreaにString.split()で空行が含まれていますか?
をここにあります問題に関するコード:
package com.mswordhf.jnet.java.contollers;
import java.net.URL;
import java.util.Arrays;
import java.util.List;
import java.util.ResourceBundle;
import com.mswordhf.jnet.java.models.JnetModel;
import com.mswordhf.jnet.java.modules.CommandWrapper;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.TextArea;
import javafx.scene.input.KeyCode;
public class CmdController implements Initializable {
private JnetModel model;
private int clientIndex;
@FXML private TextArea commandTextArea;
public CmdController(JnetModel model, int clientIndex) {
this.model = model;
this.clientIndex = clientIndex;
}
@Override
public void initialize(URL url, ResourceBundle rb) {
commandTextArea.setOnKeyPressed(keyEvent -> {
if(keyEvent.getCode() == KeyCode.ENTER) {
List<String> lines = Arrays.asList(commandTextArea.getText().split("\\n"));
String command = lines.get(lines.size() - 1);
System.out.println(command);
if(command == "\n") {
System.out.println("Worked");
}else {
CommandWrapper wrapper = new CommandWrapper(command);
model.getClients().get(clientIndex).getHandle().sendModule(wrapper);
if(!model.getCmdOutput.isRunning()) {
model.getCmdOutput.reset();
model.getCmdOutput.start();
}
}
}
});
model.getCmdOutput.setOnSucceeded(event -> {
for(String line : model.getCmdOutput.getValue()) {
commandTextArea.appendText(line + "\n");
}
model.clearList();
});
}
}
'=='プリミティブ( 'int'、' char'、 'double'、...)の等価性をチェックし、' .equals(...) 'を使ってオブジェクト(' String'、 'Object '、...)等価。また、['String#split'](http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#split(java.lang.String))には正規表現は含まれていません結果の配列に文字列が分割されました。 'if(command.equals(" \\ n "))'が常に偽になることを意味します。おそらく、空文字列 'if(command.equals(" "))'をチェックするべきです。 –
@JonnyHenlyコメントをいただきありがとうございます。私はequals()を使用していたはずですが、問題は残ります。私は、 'println(command)'は、Enterを押した後、常にキャレットから2行目を印刷するので、最後の空行が 'String#split()'によって選択されていないと考えます。 –