JAVA追加stringbuilder到textarea,不替换textarea只是添加到它(需要替换而不是添加)

标签 java string append textarea stringbuilder

我有一个字符串构建器来加载一些字符串列表,我的问题是当我添加到文本区域时,我想替换那里的内容,而不仅仅是添加到其中。我发布了我的所有代码,这是很多,所以我会进一步解释是否有人需要更多信息。我认为问题是当我在 append 时使用 .toString() 方法转换 stringbuilder 时,可能每次都会添加到列表中,如果是这种情况,我不知道如何解决这个问题...

import java.awt.GridLayout;
import javax.swing.JFrame;
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
import java.io.*;
import java.util.Scanner;
import java.util.Arrays;
import javax.swing.JComboBox;


public class Lab10 extends JPanel
{
  private StringBuilder string, string2, string3, string4; //loads SuperStrings faster by appending all at once
  private JRadioButton occurrence, alphabetical;
  private JPanel text;
  private JComboBox<Integer> input;
  private JLabel label, file1,file2, unique, unique2;
  private JButton load, go,go2;
  private CountLinkedList<SuperString> words, words3; //Change impliments CountList to extends BinaryCountTree
  private OrderedLinkedList<SuperString> words2, words4;//Change impliments CountList to extends BinaryCountTree
  private String filename,filename2;
  private int width = 450;
  private int height = 550;
  private TextArea textarea,textarea2;
  Scanner scan;

  public Lab10()
  {
    string = new StringBuilder();
    string2 = new StringBuilder();
    string3 = new StringBuilder();
    string4 = new StringBuilder();
    ButtonListener listener = new ButtonListener();
    Button2Listener listener2 = new Button2Listener();
    Integer [] select = {1,2,3,4};
    input = new JComboBox<Integer>(select);
    text = new JPanel(new GridLayout(1,2));
    go = new JButton("Select Text File 1: ");
    go2 = new JButton("Select Text File 2: ");
    label = new JLabel("N: " );
    unique = new JLabel("");
    unique2 = new JLabel("");
    file1 = new JLabel("");
    file1.setFont(new Font("Helvetica",Font.PLAIN,24));
    unique.setFont(new Font("Helvetica",Font.PLAIN,24));
    file2 = new JLabel("");
    file2.setFont(new Font("Helvetica",Font.PLAIN,24));
    unique2.setFont(new Font("Helvetica",Font.PLAIN,24));

    occurrence= new JRadioButton("Occurrence");
    occurrence.setMnemonic(KeyEvent.VK_O);
    occurrence.addActionListener(listener);
    occurrence.addActionListener(listener2);
    occurrence.setSelected(true);


    alphabetical = new JRadioButton("Alphabetical");
    alphabetical.setMnemonic(KeyEvent.VK_A);
    alphabetical.addActionListener(listener);
    alphabetical.addActionListener(listener2);

    ButtonGroup group = new ButtonGroup();
    group.add(occurrence);
    group.add(alphabetical);

    go.addActionListener(listener);
    go2.addActionListener(listener2);
    input.addActionListener(listener);
    input.addActionListener(listener2);

    textarea = new TextArea("",0,0,TextArea.SCROLLBARS_VERTICAL_ONLY);
    textarea2 = new TextArea("",0,0,TextArea.SCROLLBARS_VERTICAL_ONLY);
    textarea.setFont(new Font("Helvetica",Font.PLAIN,24));
    textarea2.setFont(new Font("Helvetica",Font.PLAIN,24));
    textarea.setPreferredSize(new Dimension(width,height));
    textarea2.setPreferredSize(new Dimension(width,height));
    setPreferredSize(new Dimension(1000,700));
    text.add(textarea);
    text.add(textarea2);
    add(occurrence);
    add(alphabetical);
    add(label);
    add(input);
    add(go);
    add(file1);
    add(unique);
    add(go2);
    add(file2);
    add(unique2);

    add(text);

    textarea.setText("No File Selected");
    textarea2.setText("No File Selected");


  }
    public class ButtonListener implements ActionListener //makes buttons do things
    {
      JFileChooser chooser = new JFileChooser("../Text");


      public void actionPerformed(ActionEvent event)
      {
       Integer N = input.getSelectedIndex()+1;

        if(event.getSource() == go)
      {

        int returnvalue = chooser.showOpenDialog(null);

    if(returnvalue == JFileChooser.APPROVE_OPTION)
    {
      try
      {
        File file = chooser.getSelectedFile();
        String text1= file.getName();
        file1.setText(text1);
        filename = file.getName();
        System.err.println(filename);
        scan = new Scanner(file);

      }
      catch (IOException e)
      {
        System.err.println("IO EXCEPTION");
        return;
      }       
    }
    else
    {
      return;
    }


     String[] storage = new String[N];
    words = new CountLinkedList<SuperString>();
    words2 = new OrderedLinkedList<SuperString>();
   for(int i=1;i<N;i++)
     storage[i] = scan.next().toLowerCase().replaceAll("[^A-Za-z0-9]", "")
                  .replaceAll("[.,':]","");

    while(scan.hasNext())
    {
      for(int i=0;i<=N-2;i++)
        storage[i] = storage[i+1];
      storage[N-1] = scan.next().toLowerCase();
      storage[N-1] = storage[N-1].replace(",","").replace(".","").replaceAll("[^A-Za-z0-9]", "")
                  .replaceAll("[.,':]","");
      SuperString ss = new SuperString(storage);
      SuperString ss2= new SuperString(storage);
      words.add(ss );
      words2.add(ss2 );
    }

    textarea.setText("");
        }
    SuperString[] ss = new SuperString[words.size()];
    SuperString[] ss2 = new SuperString[words2.size()];
    int i=0;
    int count =0, count2= 0;


    for(SuperString word: words)
    {
      ss[i] = word;
      i++;
    }
    int j=0;
    for(SuperString word: words2)
    {
      ss2[j] = word;
      j++;
    }


    Arrays.sort(ss, new SuperStringCountOrder());

    for(SuperString word : ss)
    {
      count++;
      string.append(Integer.toString(count)+ "       "+ word+ "\n");
    }
    if(occurrence.isSelected())
    {
      string.replace(0,0,"");
     textarea.setText("");
     textarea.append("    "+filename+" has wordcount: "+words.size()+
      "\n-------------------------\n\n");
     textarea.append(string.toString());
    }


     for(SuperString word : ss2)
    {
       count2++;
       string2.append(Integer.toString(count2)+ "       "+ word.toString()+ "\n");  
    }
         if(alphabetical.isSelected())
    {
                 string.replace(0,0,"");
      textarea.setText("");
      textarea.append("    "+filename+" has wordcount: "+words.size()+
      "\n-------------------------\n\n");
      textarea.append(string2.toString());

    }
     unique.setText("Unique Count: "+ Integer.toString(words.size()));

      }
    }


    public class Button2Listener implements ActionListener
    {
       JFileChooser chooser = new JFileChooser("../Text");


      public void actionPerformed(ActionEvent event)
      {
       Integer N = input.getSelectedIndex()+1;

         if(event.getSource() == go2)
      {

        int returnvalue = chooser.showOpenDialog(null);

    if(returnvalue == JFileChooser.APPROVE_OPTION)
    {
      try
      {
        File file = chooser.getSelectedFile();
        String text2= file.getName();
        file2.setText(text2);
        filename2 = file.getName();
        System.err.println(filename);
        scan = new Scanner(file);

      }
      catch (IOException e)
      {
        System.err.println("IO EXCEPTION");
        return;
      }       
    }
    else
    {
      return;
    }

     String[] storage = new String[N];
    words3 = new CountLinkedList<SuperString>();
    words4 = new OrderedLinkedList<SuperString>();
   for(int i=1;i<N;i++)
     storage[i] = scan.next().toLowerCase().replace(",","").replace(".","");

    while(scan.hasNext())
    {
      for(int i=0;i<=N-2;i++)
        storage[i] = storage[i+1];
      storage[N-1] = scan.next().toLowerCase();
      storage[N-1] = storage[N-1].replace(",","").replace(".","").replaceAll("[^A-Za-z0-9]", "")
                  .replaceAll("[.,':]","");
      SuperString ss = new SuperString(storage);
      SuperString ss2= new SuperString(storage);
      words3.add(ss );
      words4.add(ss2 );
    }
    textarea2.setText("");
         }
    SuperString[] sstwo = new SuperString[words3.size()];
    SuperString[] ss2two = new SuperString[words4.size()];
    int i=0;
    int count =0, count2= 0;

    for(SuperString word2: words3)
    {
      sstwo[i] = word2;
      i++;
    }

    int j=0;
    for(SuperString word2: words4)
    {
      ss2two[j] = word2;
      j++;
    }  

    Arrays.sort(sstwo, new SuperStringCountOrder());

        for(SuperString word2 : sstwo)
    {
      count++;
      string3.append(Integer.toString(count)+ "       "+ word2+ "\n");
    }
    if(occurrence.isSelected())
    {
     textarea2.setText("");
     textarea2.append("    "+filename2+" has wordcount: "+words3.size()+
      "\n-------------------------\n\n");
     textarea2.append(string3.toString());
    }

     for(SuperString word2 : ss2two)
    {
       count2++;
        string4.append(count2+"   "+ "  "+word2+"\n");     
    }
     if(alphabetical.isSelected())
          {
       textarea2.setText("");
       textarea2.append("    "+filename2+" has wordcount: "+words3.size()+
      "\n-------------------------\n\n");
       textarea2.append(string4.toString());
       }

     unique2.setText("Unique Count: "+ Integer.toString(words3.size()));

      }
    }



   public static void main(String[] arg)
  {
    JFrame frame = new JFrame("Lab 10");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
    frame.getContentPane().add(new Lab10());
    frame.pack();
    frame.setVisible(true);
  }
}

最佳答案

看起来你的“字符串”是一个 StringBuilder 实例变量,并且你从未重置它。你会的

textarea.setText("");
textarea.append(string.toString());

所以你首先要按照你想要的方式清除文本区域。但据我所知,“字符串”的值只会被 append 。您是否尝试使用

清除它
string.replace(0,0,"");

也许在第 187 行?那是行不通的。 Replace(0,0,"") 不会替换任何内容。第二个参数需要是要替换的字符数。 (严格来说,它是不替换的第一个字符的索引,但在本例中,这相当于相同的事情。)这个输出可能有助于澄清它在做什么。

public class A {
    public static void main(String[] args) {
      StringBuilder sb = new StringBuilder();
      sb.append("abcdefg");
      System.out.println("String is [" +sb + "]");
      sb.replace(0,0,"");
      System.out.println("String is [" +sb + "]");
      sb.replace(0,1000,"");
      System.out.println("String is [" +sb + "]");
    }
}

输出:

字符串是[abcdefg]

字符串是[abcdefg]

字符串是[]

关于JAVA追加stringbuilder到textarea,不替换textarea只是添加到它(需要替换而不是添加),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27339578/

相关文章:

java - GWT RPC 机制的序列图

java - 使 android-textview 的某个部分向右对齐

JavaScript 使用正则表达式和偏移量开始

Python 循环中的 v 堆栈

java - 如何在改造界面中从 strings.xml 中获取值?

java - 在自己插件的 EarlyStartup() 中的 Workbench.close() 期间,IDEWorkbenchAdvisor 中出现 NullpointerException

java - 如何将以 windows-1250/Cp1250 编码的字符串转换为 utf-8?

javascript - 如何在使用正则表达式对象的 javascript 字符串替换函数中操作 $2 变量?

javascript - 在焦点子项之后追加

jQuery 在 img 之后追加或appendTo