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

时间:2014-12-07 04:20:27

标签: java string append textarea stringbuilder

我有一个字符串构建器来加载一些字符串列表,我的问题是当我添加到textarea时我想替换那里的内容而不仅仅是添加它...我发布的所有代码都是很多,所以我会进一步解释是否有人需要其他信息。我认为问题是当我在附加时使用.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);
  }
}

1 个答案:

答案 0 :(得分:1)

看起来像你的&#34;字符串&#34;是一个StringBuilder实例变量,您永远不会重置它。你做了

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

所以你要先按照自己的意愿清除textarea。但&#34; string&#34;的价值只有在我能看到的时候才会被追加。你想用

清除它吗?
string.replace(0,0,"");
也许在第187行?那不会奏效。替换(0,0,&#34;&#34;)不会取代任何东西。第二个参数需要是要替换的字符数。 (严格来说,它是第一个不替换的角色的索引,但在这种情况下相同的东西。)这个的输出可能有助于澄清它在做什么。

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]

字符串是[]