方案一:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
char[] strBefore = scan.nextLine().toCharArray();
char[] strAfter = new char[2*strBefore.length];
int sAL = 0;//strAfterLocation
for(int i = 0 ; i < strBefore.length ; i++){
if(i == 0){//对于第一个字符
if(strBefore[i]>='0' && strBefore[i]<='9'){//如果第一个字符是数字
if(strBefore[i+1]>='0' && strBefore[i+1]<='9'){//如果第一个字符是数字,且第二个字符也是数字
strAfter[sAL++]='*';
strAfter[sAL++]=strBefore[i];
}else{//如果第一个字符是数字,且第二个字符不是数字
strAfter[sAL++]='*';
strAfter[sAL++]=strBefore[i];
strAfter[sAL++]='*';
}
}else//第一个字符不是数字
strAfter[sAL++]=strBefore[i];
}else if(i == strBefore.length-1){//对于最后一个字符
if(strBefore[i]>='0' && strBefore[i]<='9'){//如果最后一个字符是数字
if(strBefore[i-1]>='0' && strBefore[i-1]<='9'){//如果最后一个字符是数字,且倒数第二个字符也是数字
strAfter[sAL++]=strBefore[i];
strAfter[sAL++]='*';
}else{//如果最后一个字符是数字,且倒数第二个字符不是数字
strAfter[sAL++]='*';
strAfter[sAL++]=strBefore[i];
strAfter[sAL++]='*';
}
}else//如果最后一个字符不是数字
strAfter[sAL++]=strBefore[i];
}else{//对于中间的字符
if(strBefore[i]>='0' && strBefore[i]<='9'){//如果中间的字符是数字
if((strBefore[i-1]>='0' && strBefore[i-1]<='9') && (strBefore[i+1]>='0' && strBefore[i+1]<='9')){
//前后都是数字
strAfter[sAL++]=strBefore[i];
}else if(!(strBefore[i-1]>='0' && strBefore[i-1]<='9') && (strBefore[i+1]>='0' && strBefore[i+1]<='9')){
//前字母后数字
strAfter[sAL++]='*';
strAfter[sAL++]=strBefore[i];
}else if((strBefore[i-1]>='0' && strBefore[i-1]<='9') && !(strBefore[i+1]>='0' && strBefore[i+1]<='9')){
//前数字后字母
strAfter[sAL++]=strBefore[i];
strAfter[sAL++]='*';
}else if(!(strBefore[i-1]>='0' && strBefore[i-1]<='9') && !(strBefore[i+1]>='0' && strBefore[i+1]<='9')){
//前后都是字母
strAfter[sAL++]='*';
strAfter[sAL++]=strBefore[i];
strAfter[sAL++]='*';
}
}else//如果中间的字符不是数字
strAfter[sAL++]=strBefore[i];
}
}
for(int i = 0 ; i < sAL; i++){
System.out.print(strAfter[i]);
}
}
}
方案二:比较简单。
package oj.test;
import java.util.Scanner;
public class Demo1 {
/**
* @表示数字
* 将一个字符中所有出现的数字前后加上符号“*”,其他字符保持不变
*/
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
str = str.replaceAll("([0-9]+)", "*$1*");
System.out.println(str);
}
}
第二种方案虽然简单,但对转义字符的运用要求比较高。参考文章:http://blog.csdn.net/lily0806/article/details/45026457