在 textarea 对象的每一行上创建 if 语句
create if statement on each individual line of a textarea object
我的 java 代码试图根据文本区域对象的各行是否已填充来创建 if 语句。当文本区域框中没有任何内容时,我的代码可以工作,但是一旦输入字符,如果文本为空,我的代码就不起作用 anymore.As 您可以在 gif 中看到。当输入一个字符并且用户按下回车键时,即使该行上没有任何内容。 Sam 仍被添加到行中。那不应该发生。只有当角色在线时,才应将 Sam 添加到行中。
class text11 extends JFrame implements ActionListener{
static JFrame f;
static JTextArea jt;
// main class
public static void main(String[] args)
{
// create a new frame to store text field and button
f = new JFrame("textfield");
jt.addKeyListener(new CustomKeyListener());
}
}
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_ENTER){
if(text11.jt.getText().trim().isEmpty()) {
System.out.println( "Hi" );
}
else {
text11.jt.setText(text11.jt.getText() + " sam");
}
}
}
嗯。我就是这样实现的。
if(e.getKeyCode() == KeyEvent.VK_ENTER){
if(text11.jt.getText().trim().isEmpty()){
System.out.println("Hi");
}else{
String text = text11.jt.getText() + " sam";
String arrText = text.split("\n");
String last = text[text.length - 1];
if(" sam".equals(last)){
System.out.println("Hi");
}else{
text11.jt.setText(text);
}
}
}
注意:"sam" 之前的空格数必须始终相等。
.getText()
returns 全部文字。不只是 'the last line entered'。例如,您可以使用字符串的 split 方法首先将文本分成单独的行,然后检查最后一行。
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_ENTER) {
// Split the entire text string into lines.
String[] lines = text11.jt.getText().split("\r?\n");
// Zero lines _OR_ the last line, after trimming, is empty?
if (lines.length == 0 || lines[lines.length - 1].trim().isEmpty()) {
System.out.println( "Hi" );
} else {
text11.jt.setText(text11.jt.getText() + " sam");
}
}
}
或者,您可以从末尾开始,然后往回走,检查每个字符。更多的代码,但理论上更快(但直到你输入 lot 的文本,大约 1 兆字节或更多,它才会被注意到。我会选择那个您发现最容易遵循:
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_ENTER) {
String txt = text11.jt.getText();
boolean hasText = false;
// Walk from last character to first.
for (int i = txt.length() - 1; i >= 0; i--) {
// Is it a newline? Then we're done; there is no text on last line.
if (txt.charAt(i) == '\n') break;
// Is it whitespace (spaces or tabs)? Keep looking.
if (Character.isWhitespace(txt.charAt(i))) continue;
// There is text here. Mark that down and we're done.
hasText = true;
break;
}
if (hasText) {
text11.jt.setText(text11.jt.getText() + " sam");
} else {
System.out.println( "Hi" );
}
}
}
最后一个将向后走,如果看到空格则继续,如果看到非空格字符则停止(结果:最后一行有实际字符),如果看到换行符也停止(结果:最后一行没有实际字符)。
我的 java 代码试图根据文本区域对象的各行是否已填充来创建 if 语句。当文本区域框中没有任何内容时,我的代码可以工作,但是一旦输入字符,如果文本为空,我的代码就不起作用 anymore.As 您可以在 gif 中看到。当输入一个字符并且用户按下回车键时,即使该行上没有任何内容。 Sam 仍被添加到行中。那不应该发生。只有当角色在线时,才应将 Sam 添加到行中。
class text11 extends JFrame implements ActionListener{
static JFrame f;
static JTextArea jt;
// main class
public static void main(String[] args)
{
// create a new frame to store text field and button
f = new JFrame("textfield");
jt.addKeyListener(new CustomKeyListener());
}
}
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_ENTER){
if(text11.jt.getText().trim().isEmpty()) {
System.out.println( "Hi" );
}
else {
text11.jt.setText(text11.jt.getText() + " sam");
}
}
}
嗯。我就是这样实现的。
if(e.getKeyCode() == KeyEvent.VK_ENTER){
if(text11.jt.getText().trim().isEmpty()){
System.out.println("Hi");
}else{
String text = text11.jt.getText() + " sam";
String arrText = text.split("\n");
String last = text[text.length - 1];
if(" sam".equals(last)){
System.out.println("Hi");
}else{
text11.jt.setText(text);
}
}
}
注意:"sam" 之前的空格数必须始终相等。
.getText()
returns 全部文字。不只是 'the last line entered'。例如,您可以使用字符串的 split 方法首先将文本分成单独的行,然后检查最后一行。
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_ENTER) {
// Split the entire text string into lines.
String[] lines = text11.jt.getText().split("\r?\n");
// Zero lines _OR_ the last line, after trimming, is empty?
if (lines.length == 0 || lines[lines.length - 1].trim().isEmpty()) {
System.out.println( "Hi" );
} else {
text11.jt.setText(text11.jt.getText() + " sam");
}
}
}
或者,您可以从末尾开始,然后往回走,检查每个字符。更多的代码,但理论上更快(但直到你输入 lot 的文本,大约 1 兆字节或更多,它才会被注意到。我会选择那个您发现最容易遵循:
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_ENTER) {
String txt = text11.jt.getText();
boolean hasText = false;
// Walk from last character to first.
for (int i = txt.length() - 1; i >= 0; i--) {
// Is it a newline? Then we're done; there is no text on last line.
if (txt.charAt(i) == '\n') break;
// Is it whitespace (spaces or tabs)? Keep looking.
if (Character.isWhitespace(txt.charAt(i))) continue;
// There is text here. Mark that down and we're done.
hasText = true;
break;
}
if (hasText) {
text11.jt.setText(text11.jt.getText() + " sam");
} else {
System.out.println( "Hi" );
}
}
}
最后一个将向后走,如果看到空格则继续,如果看到非空格字符则停止(结果:最后一行有实际字符),如果看到换行符也停止(结果:最后一行没有实际字符)。