把输入的数字+字母替换为字母个数为数字
用replaceAll的方法怎么实现?
不知道replacement这个怎么写String input="5x";
String output="xxxxx";
String regex="(\\d)([a-zA-Z])";
String repl="$2$1";
System.out.println(input.replaceAll(regex,repl));
用replaceAll的方法怎么实现?
不知道replacement这个怎么写String input="5x";
String output="xxxxx";
String regex="(\\d)([a-zA-Z])";
String repl="$2$1";
System.out.println(input.replaceAll(regex,repl));
输入"3Y",运行后输出3个Y
主要是想知道怎么能在replacement中得到regex中数字的具体值
package com.xuyisen.monitor.test;import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
public static void main(String[] args) {
String source = "aa5x2aa6y";
String regex = "(\\d[a-zA-Z])";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(source);
while(m.find()){
String temp = m.group(1);
String number = temp.substring(0, temp.length()-1);
char letter = temp.charAt(temp.length()-1);
String newStr = "";
for(int i=0;i<Integer.parseInt(number);i++){
newStr+=letter;
}
source = source.replace(temp, newStr);
}
System.out.println("替换后为:"+source);
}
}只能想出这方法了
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class TestA {
public static void main(String[] args){
String input="这是什么呀?这样真的可以吗?4k真的可以呀~~~";
Matcher m=Pattern.compile("(\\d)([a-zA-Z])").matcher(input);
StringBuffer sbuf=new StringBuffer();
while(m.find()){
m.appendReplacement(sbuf, fun(Integer.parseInt(m.group(1)),m.group(2)));
}
m.appendTail(sbuf);
System.out.println(sbuf);
}
public static String fun(int i,String s){
String result="";
for(int j=0;j<i;j++)
result+=s;
return result;
}
}
System.out.println(duplicate(str));
} public static String duplicate(String str) {
if(str == null || str.length() == 0) {
return str;
}
char[] chs = str.toCharArray(); int offset = 0; // 开头的数值
int amount = 0; // 寻找开头的数值
while(chs[offset] >= '0' && chs[offset] <= '9') {
amount = amount * 10 + (chs[offset] - '0');
offset++;
} // 开头没有数字或数字为 0 时返回空字符串
if(offset == 0 || amount == 0) {
return "";
} // 去开头的数字后,剩余的字符长度
int length = chs.length - offset; // 创建一个可以容纳 amount * length 长度的字符数组,用于重复存储字符串
char[] cs = new char[length * amount]; // 逐一复制字符串数组
// TODO 这里还有优化的余地,可以复制 amount / 2,再整个复制这一半等等
for(int i = 0; i < amount; i++) {
System.arraycopy(chs, offset, cs, length * i, length);
}
return new String(cs);
}
}
public class Array {
/**
* @param args
*/
public static void main(String[] args) {
/**
* 查看输入的字符串,如果含有数字和字母,输出字母的个数为数字
* 用正则表达式找出这样的组合,然后循环打印
*/
String str = "rt4up3dxf4il5toento6arqo5yu";
String regex = "([a-zA-Z]*)(\\d+)([a-zA-Z])([a-zA-Z]*)";
Matcher mm = Pattern.compile(regex).matcher(str);
String newStr = "";
if(mm.find(0)){
newStr = getNewStr(newStr,mm);
}
while(mm.find()){
newStr = getNewStr(newStr,mm);
}
System.out.println(newStr);
} private static String getNewStr(String newStr, Matcher mm) {
// TODO Auto-generated method stub
newStr += mm.group(1);
for(int i = 0;i<Integer.parseInt(mm.group(2));i++){
newStr += mm.group(3);
}
newStr += mm.group(4);
return newStr;
}
}