Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: GUI и Java FX приложения > найти повторяющиеся символы и их количество


Автор: Mitresky 18.12.2008, 14:29
Подскажите, нужно найти повторяющийся символ алфавита в файле, программа должна вывести  эти символы и номерами строк  в jTable, где он повторяется.

Автор: zhail 18.12.2008, 18:20
Как я понимаю текст в файле, а что и в каком виде должно попасть в таблицу, в какие строки,... расскажи чуть подробнее.

Вообще берем текст в входном потоке и парсим его, нашли и в таблицу.

Расскажи подробнее.

Автор: Mitresky 19.12.2008, 13:10
Вот пример файла:
a
b
c
0
d
e
2
f
g
h
i
j
k
1
6
l
m
5
n
o
3
p
q
r
6
s
t
7
u
w
x
y
z
9
8
g
a
b
c
a
b
c

он обязательно должен быть столбцом. По этому примеру должен быть, что a - 3 раза повторяется, так же b и c. И всё это занести в таблицу.

Вот пример таблицы: Она просто состоит из двух столбцов. В одной какой символ повторился, во-второй сколько раз.

private void initComponents() {


jScrollPane1 = new javax.swing.JScrollPane();
jTable1 = new javax.swing.JTable();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);


jTable1.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null}
},
new String [] {
"Символ", "Количество вхождений"
}
) {
boolean[] canEdit = new boolean [] {
false, true
};

public boolean isCellEditable(int rowIndex, int columnIndex) {
return canEdit [columnIndex];
}
}); 

Надеюсь понятно :(

Автор: zhail 19.12.2008, 16:36
тут проблемы по перебору символов решит StreamTokenizer и перебор таблицы при каждом .nextToken()

Автор: dorogoyIV 20.12.2008, 10:02
Код

import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
import java.io.*;
import java.util.*;

public class StringCount extends JFrame
                         implements ActionListener
{
 JTable table = new JTable(0, 2);
 JButton jb = new JButton("Count");
 ArrayList <String> list = new ArrayList <String> ();
 Hashtable <String, Integer> h = new Hashtable <String, Integer> ();

 public StringCount()
 {
  ((TableColumn)table.getColumnModel().
        getColumn(0)).setHeaderValue("Строка");
  ((TableColumn)table.getColumnModel().
        getColumn(1)).setHeaderValue("Количество вхождений");
  add(new JScrollPane(table));
  add(jb, "South");
  jb.addActionListener(this);
 }

 public void actionPerformed(ActionEvent e)
 {
  readFile(new File("text.txt"));
 }

 private void count(String s)
 {
  int value = 1;

  if(!list.contains(s))
   list.add(s);

  else
   value = h.get(s) + 1;

  h.put(s, new Integer(value));
  loadTable();
 }

 private void loadTable()
 {
  DefaultTableModel model = (DefaultTableModel)table.getModel();
  model.setRowCount(0);

  for(int i = 0; i < list.size(); i++)
   model.addRow(new Object [] {list.get(i), h.get(list.get(i))});
 }

 private void readFile(File file)
 {
  list.clear();
  h.clear();

  try
  {
   BufferedReader reader = new BufferedReader(new FileReader(file));
   String s;

   while((s = reader.readLine()) != null)
    count(s);

   reader.close();
  }
  catch(Exception ex){}
 }

 public static void main(String [] args)
 {
  JFrame f = new StringCount();
  f.setBounds(100, 100, 400, 300);
  f.setDefaultCloseOperation(3);
  f.setVisible(true);
 }
}


 smile стоял перед выбором - то ли номера строк нужны?, то ли количество вхождений?  smile 
написал для последнего

Автор: Mitresky 24.12.2008, 20:47
Спасиба ДРУГ!! помог!! smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)