在 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" );
       }
    }
}

最后一个将向后走,如果看到空格则继续,如果看到非空格字符则停止(结果:最后一行有实际字符),如果看到换行符也停止(结果:最后一行没有实际字符)。