2014-12-07 115 views
0

我有一个stringbuilder来加载一些字符串列表,我的问题是当我添加到textarea我想替换什么在那里,而不只是添加到它..我发布我的所有代码是很多,所以我会进一步解释是否有人需要额外的信息。我想问题是,当我追加时,使用.toString()方法将stringbuilder转换时,可能每次都添加到列表中,如果是这种情况,我不知道如何解决这个问题...JAVA将stringbuilder附加到textarea,而不是替换textarea只是添加到它(需要替换而不是添加)

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); 
    } 
} 
+0

是此代码不替换文本区域中的文本? – varun 2014-12-07 04:25:07

+0

Noooo和我不知道whyyyy – 2014-12-07 04:25:27

+0

textarea2.setText(“”); textarea2.append(“”+ filename2 +“has wordcount:”+ words3.size()+“\ n ------------------------- \ n \ n“); textarea2.append(string4.toString());这是代码附加文本而不是添加? – varun 2014-12-07 04:26:44

回答

1

它看起来像你的“字符串”是一个StringBuilder实例变量,你永远不会重置它。你做

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

所以你要先清理textarea,因为你想。但是,“字符串”的价值只会被我追踪到。您是否试图用

string.replace(0,0,""); 

在线187或许?这是行不通的。替换(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]

字符串是[]

+0

好吧,所以这个作品我做了(string.replace(0,string.size(),“”); ..这工作,但它打印出2列表,除非我选择出现或按字母顺序两次然后它下降到一个列表。我的string.replace代码是不工作,直到它被选中两次后??如果这是有道理的 – 2014-12-07 17:51:46

+0

因此,最初它打印出2列表,并再次选择按钮后,它打印出1(这是我想要的) – 2014-12-07 17:53:40

+0

一般你可以在'public void actionPerformed(ActionEvent event)'方法中使用'string = new StringBuilder()'行,然后你可以确定它在每次操作发生时都会被重置/重新创建,因为现在它在点击之间依然存在,另外,我认为在200行附近有一个错误。该代码区域是操作string2变量,但是在该行上,您将调用字符串上的重置不是string2。 – stevecass 2014-12-08 01:00:46

相关问题