用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));
18 个解决方案
#1
看不懂你说的啥意思··具体点··什么字母+数字?转为字母?
#2
我觉得这个问题用replaceAll恐怕没法实现,正则表达式虽然强大,但也不会是无所不能,比如楼主想要把5x转成5个x,那么repl要么是"$2$2$2$2$2"要么是"xxxxx"
所以还得用for来生成5个x是最适合的方案。
所以还得用for来生成5个x是最适合的方案。
#3
用正则。。。。。。。。。。。。。
#4
用正则。。。。。。。。。。。。。
#5
比如输入"5X",运行后输出5个X
输入"3Y",运行后输出3个Y
#6
如果用"$2$2$2$2$2"那么换一个字母怎么实现。。。
主要是想知道怎么能在replacement中得到regex中数字的具体值
#7
一定要用正则表达式替换么?
#8
没有,上次有个装B的说用正则能够实现。可是我弄死想不出来。
用其他什么方法实现最快?
主要是判读字符串中数字的问题
#9
简单实用的方法最好,
#10
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);
}
}
只能想出这方法了
#11
用了一个额外的方法,但只想到这么多了
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;
}
}
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;
}
}
#12
先获用正则获取数字,然后通过循环打印你的字母
#13
别去理他,这种人会了点皮毛就自以为精通了正则表达式!
使用字符数组是最快的实现方法。
#14
public class Test2 {
public static void main(String[] args) {
String str = "12abc";
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);
}
}
#15
正则表达式
#16
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;
}
}
#17
依旧蛋疼无比
#18
g
#1
看不懂你说的啥意思··具体点··什么字母+数字?转为字母?
#2
我觉得这个问题用replaceAll恐怕没法实现,正则表达式虽然强大,但也不会是无所不能,比如楼主想要把5x转成5个x,那么repl要么是"$2$2$2$2$2"要么是"xxxxx"
所以还得用for来生成5个x是最适合的方案。
所以还得用for来生成5个x是最适合的方案。
#3
用正则。。。。。。。。。。。。。
#4
用正则。。。。。。。。。。。。。
#5
比如输入"5X",运行后输出5个X
输入"3Y",运行后输出3个Y
#6
如果用"$2$2$2$2$2"那么换一个字母怎么实现。。。
主要是想知道怎么能在replacement中得到regex中数字的具体值
#7
一定要用正则表达式替换么?
#8
没有,上次有个装B的说用正则能够实现。可是我弄死想不出来。
用其他什么方法实现最快?
主要是判读字符串中数字的问题
#9
简单实用的方法最好,
#10
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);
}
}
只能想出这方法了
#11
用了一个额外的方法,但只想到这么多了
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;
}
}
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;
}
}
#12
先获用正则获取数字,然后通过循环打印你的字母
#13
别去理他,这种人会了点皮毛就自以为精通了正则表达式!
使用字符数组是最快的实现方法。
#14
public class Test2 {
public static void main(String[] args) {
String str = "12abc";
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);
}
}
#15
正则表达式
#16
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;
}
}
#17
依旧蛋疼无比
#18
g