一个简单程序代码,请大家批批!

lei001 2010-12-04 02:25:56
一个简单的程序,实现的功能是输入几行字符串,然后过滤字符 '-',根据一定规律,将字母转化成数字。最后统计输入的不同字符串的个数。例如:
输入
5 //表示将要输入的字符串个数
--234-
2-3-4-
qw-er-
1eron
q-w-e--------r

统计结果:
234 2
5715 2
11544 1

代码如下:
package Coutstr;

import java.util.*;
import java.io.*;

class ResultArray{
List lst = new ArrayList();
List outstr = new ArrayList();
char chr = ' ';

public void addline(String str){
lst.add(str);
}

public void setrmchar(char ch){
chr = ch;
}

public void preprocessline(int index){
String str;
int i = 0;
int j = 0;
int len;
char[] chrs ;
char[] r_char;
char c;

str = (String)lst.get(index);
len = str.length();
chrs = new char[len];

for(i=0; i< len; i++)
{
c = str.charAt(i);
chrs[i] = 0;

if(c != chr){
if((c >= 'A' && c < 'D')||(c >= 'a' && c < 'd'))
chrs[j] = '0';
else if((c >= 'D' && c < 'G')||(c >= 'd' && c < 'g'))
chrs[j] = '1';
else if((c >= 'G' && c < 'K')||(c >= 'g' && c < 'k'))
chrs[j] = '2';
else if((c >= 'K' && c < 'N')||(c >= 'k' && c < 'n'))
chrs[j] = '3';
else if((c >= 'N' && c < 'Q')||(c >= 'n' && c < 'q'))
chrs[j] = '4';
else if((c >= 'Q' && c < 'T')||(c >= 'q' && c < 't'))
chrs[j] = '5';
else if((c >= 'T' && c < 'W')||(c >= 't' && c < 'w'))
chrs[j] = '6';
else if((c >= 'W' && c < 'Y')||(c >= 'w' && c < 'y'))
chrs[j] = '7';
else if((c == 'Y')||(c == 'y'))
chrs[j] = '8';
else if((c >= 'Z')||(c =='z'))
chrs[j] = '9';
else{
chrs[j]= c;
}
j++;
}
}

len = j;
if(len > 0){
r_char =new char[j];
for(i=0; i<len; i++){
r_char[i]= chrs[i];
}
String str1 = new String(r_char);
outstr.add(str1);
}
};

public void processline(){
int i = 0;
int j = 0;
int len = outstr.size();
int []num = new int [len];

for(i=0; i< len ;i++)
num[i] = 1;

for(i = 0; i < len; i++){
for(j=i+1; j < len; j++){
if( (outstr.get(i).equals(outstr.get(j))) && (num[j]!=0)){
num[i] = num[i] +1;
num[j] = 0;
}
}
}

for(i = 0; i < len; i++){
if(num[i]!=0){
System.out.println(outstr.get(i).toString()+" "+num[i]);
}
}

}

};

public class Coutstr {

static ResultArray RArray = new ResultArray();

public static void main(String[] args) throws IOException {
int i = 0;
int number = 0;

//输入需要处理的字符串数字
System.out.println("Enter number:");
Scanner in = new Scanner(System.in);
number = in.nextInt();
System.out.println(number);

//录入字符串
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str;
do {
str = br.readLine();
RArray.addline(str);
i++;
} while (i < number);


//过滤'-',并将字母转化成对应的数字
RArray.setrmchar('-');

for(i=0;i<number;i++){
RArray.preprocessline(i);
}

//统计相同的字符串,并输出统计的结果
RArray.processline();
}
};

备注:
请大家给给意见,比如代规范,类的设计等方面,谢谢!!
...全文
162 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
qian119110 2010-12-04
  • 打赏
  • 举报
回复
o 似乎看错了
我最后输出的是去掉符号的数字 和符号的个数。
qian119110 2010-12-04
  • 打赏
  • 举报
回复
代码太长了~~

import java.io.*;
import java.util.*;
public class FilterString{
public static void main(String[] args) throws IOException{
//输入需要处理的字符串数字
System.out.println("输入字符串:");
Scanner in = new Scanner(System.in);
String str=in.next();
List<String> list = new ArrayList<String>();
list.add(str);
for(String item:list){
System.out.println(item);

}
int i=0;
for(String item:str.split("-"))
{
i+=item.length();

}
for(String item:str.split("-"))
System.out.print(item);
System.out.println("\t"+(str.length()-i));


}

}











冰思雨 2010-12-04
  • 打赏
  • 举报
回复
package houlei.csdn.text;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import java.util.TreeMap;

/**
* 一个简单的程序,实现的功能是输入几行字符串,然后过滤字符 '-',根据一定规律,将字母转化成数字。<br/>
* 最后统计输入的不同字符串的个数。<p/>
* 例如:<br/> 输入<br/> 5 //表示将要输入的字符串个数<br/> --234-<br/> 2-3-4-<br/> qw-er-<br/>
* 1eron<br/> q-w-e--------r<br/> <br/> 统计结果:<br/> 234 2<br/> 5715 2<br/>
* 11544 1<br/>
*
* @author HouLei
*
*/
public class Countstr {

/**
* 保存输入的数据
*/
private static List<String> income = new ArrayList<String>();

/**
* 保存输出的数据
*/
private static Map<String, Integer> outgo = new TreeMap<String, Integer>();

/**
* 从控制台读入数据
*/
private static void readFromConcle() {
// 输入需要处理的字符串数字
System.out.println("Enter number:");
Scanner in = new Scanner(System.in);
int lines = in.nextInt();
in.nextLine();
for (int i = 0; i < lines; i++) {
String line = in.nextLine();
income.add(line);
}
}

/**
* 从文本文件中读入数据
*/
private static void readFromFile(String fileName)
throws FileNotFoundException {
Scanner in = new Scanner(new FileInputStream(fileName));
while (in.hasNextLine()) {
income.add(in.nextLine());
}
}

/**
* 通过替换的方式过滤字符串中的某些字符。
*
* @param regex
* 正则表达式
*/
private static List<String> filterIncome(String regex) {
List<String> result = new ArrayList<String>(income.size());
for (String line : income) {
result.add(line.replaceAll(regex, ""));
}
return result;
}

/**
* 过滤掉字符串中的‘-’符号
*/
private static List<String> filterIncome() {
return filterIncome("\\-");
}

/**
* 将字母转化成数字
*/
private static String degist(String str) {
StringBuilder buff = new StringBuilder();
for (char ch : str.toCharArray()) {
if (ch >= 'a' && ch < 'z') {
ch = (char) ('0' + (ch - 'a') / 3);
} else if (ch >= 'A' && ch < 'Z') {
ch = (char) ('0' + (ch - 'A') / 3);
} else if (ch == 'z' || ch >= 'Z') {
ch = '9';
}
buff.append(ch);
}
return buff.toString();
}

/**
* 核心方法,处理输入的数据
*/
private static void doService() {
List<String> in = filterIncome();
// 统计过滤后,相同字符串的个数。
Map<String, Integer> cache = new HashMap<String, Integer>();
for (String key : in) {
if (null == cache.get(key)) {
cache.put(key, 1);
} else {
cache.put(key, cache.get(key) + 1);
}
}
// 处理字符串
for (Map.Entry<String, Integer> e : cache.entrySet()) {
String degist = degist(e.getKey());
outgo.put(degist, e.getValue());
}
}

/**
* 打印结果
*/
private static void printOutgo() {
for (Map.Entry<String, Integer> e : outgo.entrySet()) {
System.out.println(e.getKey() + "\t" + e.getValue());
}
}

public static void main(String[] args) throws IOException {
if (args != null && args.length > 0) {
readFromFile(args[0]);
} else {
readFromConcle();
}
doService();
printOutgo();
}
}
magong 2010-12-04
  • 打赏
  • 举报
回复
程序跑了一下,好像没有错,但是阅读比较困难。

我觉得如果我来写这个程序的话,会这样做:
1. 尽量利用Java类集API来做,比方说Map,用字符串做Key,用出现次数做value,程序更好理解一些,长度也会短一些
2. 那个长长的if/else/if,最容易潜伏错误。可以用一个char数组来简单实现查表定值,(查表翻译),不太容易出错
nfs13nfs14 2010-12-04
  • 打赏
  • 举报
回复
好多啊,main()的代码最好也放到一个单独的方法中或者类中,main()代码不要太多
有些地方最好加点注释,一开始都不知道有些变量是干什么的,
类变量的话最好用private

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧