统计一个字符串中的英文字母数量,并且将多个字母替换成一个下划线。
例 北京2008,beijing2008-->北京2008,_2008
下面是我的代码:
import java.util.Scanner;
import java.lang.*;public class Test2 { public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入字符串:");
String str = sc.next();
int n = 0;
for (int i = 0; i < str.length(); i++) {
if (Character.isLetter(str.charAt(i))) {
n++;
}
}
System.out.println("英文字母数量:");
System.out.println(n);
for (int j = 0; j < str.length(); j++) {
int len=str.length();
if (Character.isLetter(str.charAt(j))) {
str = str.replace(str.charAt(j),'_');
}
str = str.replace("__", "_");
if(str.length()==len-1){
j--;
}
}
System.out.println(str);
}}
求好心人帮忙改改
例 北京2008,beijing2008-->北京2008,_2008
下面是我的代码:
import java.util.Scanner;
import java.lang.*;public class Test2 { public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入字符串:");
String str = sc.next();
int n = 0;
for (int i = 0; i < str.length(); i++) {
if (Character.isLetter(str.charAt(i))) {
n++;
}
}
System.out.println("英文字母数量:");
System.out.println(n);
for (int j = 0; j < str.length(); j++) {
int len=str.length();
if (Character.isLetter(str.charAt(j))) {
str = str.replace(str.charAt(j),'_');
}
str = str.replace("__", "_");
if(str.length()==len-1){
j--;
}
}
System.out.println(str);
}}
求好心人帮忙改改
import java.util.Arrays;
import java.util.Scanner;public class Test { public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入字符串:");
String str = sc.next();
char[] ca = str.toCharArray();
int n = 0;
for(int i=0; i<ca.length; i++) {
if('a'<=Character.toLowerCase(ca[i]) && Character.toLowerCase(ca[i])<='z') {
n++;
ca[i] = '_';
}
}
System.out.println(Arrays.toString(ca));
char[] cb = new char[ca.length];
int k=0;
for(int i=0; i<ca.length; ) {
int j;
for(j=i+1; j<ca.length; j++) {
if(!(ca[i]=='_' && ca[j]=='_')) {
break;
}
}
cb[k++] = ca[i];
i = j;
}
StringBuilder sb = new StringBuilder();
for(Character c : cb) {
if(c.charValue() != 0)
sb.append(c);
}
System.out.println(sb.toString());
}
}
至于统计英文字母 循环判断一下 遇到 a-zA-Z 内的字母 字母数量就加1 最后打印出总数量就可以了
import java.util.*;public class Test { public static void main(String[] args) throws Exception{
Scanner sc = new Scanner(System.in);
System.out.println("请输入字符串:");
String str = sc.next();
int count = 0; //字母个数
int position=0; //字母前移插入位置
boolean flag=true; //判断是否在读连续的字母串,true表示否
char c[]=str.toCharArray();
int i;
for (i = 0; i < str.length(); i++) {
if (isLetter(c[i])) { //isLetter()是自定义方法,因为Character.isLetter()判断汉字字符会返回true
count++;
if(flag){
if(count==1){ //count=1说明遇到第一个字符,此位置后面的非字母字符将前移覆盖字母字符,例如“1er4”,e位置被替换为_,4前移覆盖r,字符串变为“1_4”
position=i;
}
flag=false;
c[position++]='_';
}
}else if(count>0){
flag=true;
c[position++]=c[i];
}
}
System.out.println("英文字母数量:"+count);
System.out.println(new String(c,0,position));
} private static boolean isLetter(char c){
if((c>'a'&&c<'z')||(c>'A'&&c<'Z')){
return true;
}
return false;
}
}
谢谢五楼了,我不知道Character.isLetter()方法汉字也会返回true。有注释真看着爽
import java.util.regex.Pattern;public class Test3 {
//计算长度
public static int calcLetter(String src)
{
int count = 0;
if(src!=null&&!"".equals(src))
{
//本身长度-替换掉字母的长度
count = src.length()-src.replaceAll("[A-Za-z]", "").length();
}
return count;
} //转换字符串
public static String transLetter(String src)
{
String result ="";
if(src!=null&&!"".equals(src))
{
Pattern p = Pattern.compile("([A-Za-z]+)");
Matcher m = p.matcher(src);
result = src;
while(m.find())
{
//替换正则表达式匹配的字符
result = result.replaceFirst(m.group(1), "_");
}
}
return result;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String test = "北京2008,beijing2008";
System.out.println(Test3.calcLetter(test));
System.out.println(Test3.transLetter(test));
}}
{
String result = "";
int length = 0;
if (src != null && !"".equals(src)) {
Pattern p = Pattern.compile("([A-Za-z]+)");
Matcher m = p.matcher(src);
result = src;
while (m.find()) {
// 替换正则表达式匹配的字符
result = result.replaceFirst(m.group(1), "_");
//本次匹配的开始减去本次匹配的结束,就是本次匹配的字母数量了
length += m.end() - m.start();
}
}
System.out.println(result);
System.out.println(length);
}
replaceAll 用的就是正则啊。两个分开写是为了方便使用(便于修改)。
String str = str.replaceAll("[a-zA-Z]+","_");