java中根据一段字符串,获取其中的字母,有要求;求个具体代码

1.以行为单位,每行解析输出字母(A-Za-z),以逗号“,”隔开。例如:b123%12as@#,输出a,b,a,s)
2.若输入文件内容的字是连在一起的,且为0-10的英文,则进行集合输出。(例如:one123Two21$THREE@#fOU#@R,输出one,Two,THREE,f,O,U,R)
3.翻译0-10数字,进行小写英文输出。(例如,0as2sw$#3,输出zero,a,s,two,s,w,three)
4.结果去重

要求1中要去掉所有数字,要求2、3中又要保留数字并进行翻译,所以我两种都写了。具体代码为:


public class Test {
public static void main(String args[]) {
String str = "0as2sw$#3Six";
System.out.println("原字符串:[" + str + "]");
System.out.println("");
//不翻译数字
Set<String> set1 = new LinkedHashSet<>();
for (String s : str.split("[^A-Z a-z]")) {
if (s.length() > 0) {
set1.add(s);
}
}
System.out.println("不翻译数字的结果:" + set1);
System.out.println("");


       /*因为又要去除非字母和数字(以下简称去杂),又要将去杂结果分离成数字和字母,再翻译数字,整个流程挺麻烦的,索性在去杂之前,先将数字翻译成英文,为了使数字翻译后的英文和原字符串的字母分开,在数字左右添加占位符#,这样的话,形如:[a1b2c3]就会被处理为:[a#one#b#two#c#three#],这样去杂后,就会被分割为:[a,one,b,two,c,three]了。这里定义了枚举值English,用于实现0-9的英文映射,[10]不好映射成[ten],现在只能映射为[one,zero],如果按照题干非要映射为ten的话你再考虑考虑吧*/
for (English english : English.values()) {
str = str.replaceAll(english.getNum() + "", "#" + english.name() + "#");
}
System.out.println("将数字替换为“占位符 + 英文 + 占位符”的中间结果:[" + str + "]");
System.out.println("");


       //翻译数字的结果
Set<String> set2 = new LinkedHashSet<>();
for (String s : str.split("[^A-Za-z]")) {
if (s.length() > 0  ) {
//判断当前字符串是否是数字的英文,如果不是,就把它拆成单字母
if (mappingEnglish(s)){
set2.add(s);
}else {
for (char c : s.toCharArray()) {
set2.add(String.valueOf(c));
}
}
}
}
System.out.println("翻译数字的结果:" + set2);
}


   //判断当前字符串是否是数字的英文
private static boolean mappingEnglish(String str) {
for (English english : English.values()) {
str = str.toLowerCase();
if (english.name().equals(str)) {
return true;
}
}
return false;
}


   enum English {
zero(0),
one(1),
two(2),
three(3),
four(4),
five(5),
six(6),
seven(7),
eight(8),
nine(9);

private int num;

public int getNum() {
return num;
}

English(int num) {
this.num = num;
}
}
}


我怕发出来代码又挤在一起,顺便也截个图:

8-21行

22-50行

51-61行

62-85行完



运行结果:

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-10-16
package test; import java.util.Scanner; public class test {    public static void main(String[] args) {        while(true){            Scanner input=new Scanner(System.in);            System.out.print("请输入带字母的字符串:");                     String str1=input.next();                  int counA=0;            int couna=0;                         for(int i=0;i<str1.length();i++){                if((byte)str1.charAt(i)>64&&(byte)str1.charAt(i)<91){                    counA++;                }else if((byte)str1.charAt(i)>96&&(byte)str1.charAt(i)<123){                    couna++;                }            }            if(counA==0&&couna==0){                System.out.println("输入错误,请重新输入带字母的字符串:");            }else if(counA==0){                System.out.println("输入的字符串中含大写字母0个");            }else{                System.out.println("大写字母有"+counA+"个");            }        }    }}

   

本回答被网友采纳
相似回答