Я пытался понять это сейчас, но не могу заставить его работать. По существу у меня есть JavaFX TextArea, и я хочу построить новый Object с именем CommandWrapper с последней строкой ввода (т. Е. Строка над кареткой после нажатия клавиши ENTER). Всякий раз, когда я ударил ENTER после ввода команды она работает безупречно, но по какой-то причине моей функции String.split() не получите пустую строку, если я не ВВЕД команды золы показана на рисунке GIF: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 "))' всегда будет false, возможно, вы должны проверить пустую строку, 'if (command.equals (" "))'. –
@JonnyHenly Спасибо за комментарий, и вы правы, я должен был использовать equals(), но проблема остается. Я считаю, что последняя пустая строка не подхвачена «String # split()», потому что «println (command)» всегда печатает строку 2 вверх от каретки после нажатия ENTER. –