String的replaceAll()方法的用法

时间:2022-10-12 15:57:16
把输入的数字+字母替换为字母个数为数字
用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是最适合的方案。

#3


 用正则。。。。。。。。。。。。。

#4


 用正则。。。。。。。。。。。。。

#5


引用 1 楼 cenhuineng 的回复:
看不懂你说的啥意思··具体点··什么字母+数字?转为字母?

比如输入"5X",运行后输出5个X
输入"3Y",运行后输出3个Y

#6


引用 2 楼 lingxuch 的回复:
我觉得这个问题用replaceAll恐怕没法实现,正则表达式虽然强大,但也不会是无所不能,比如楼主想要把5x转成5个x,那么repl要么是"$2$2$2$2$2"要么是"xxxxx"

所以还得用for来生成5个x是最适合的方案。

如果用"$2$2$2$2$2"那么换一个字母怎么实现。。。
主要是想知道怎么能在replacement中得到regex中数字的具体值

#7


一定要用正则表达式替换么?

#8


引用 7 楼 bao110908 的回复:
一定要用正则表达式替换么?

没有,上次有个装B的说用正则能够实现。可是我弄死想不出来。
用其他什么方法实现最快?
主要是判读字符串中数字的问题

#9


引用 8 楼 hyh11223 的回复:
引用 7 楼 bao110908 的回复:

一定要用正则表达式替换么?

没有,上次有个装B的说用正则能够实现。可是我弄死想不出来。
用其他什么方法实现最快?
主要是判读字符串中数字的问题


简单实用的方法最好,

#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;
}
}

#12


先获用正则获取数字,然后通过循环打印你的字母

#13


引用 8 楼 hyh11223 的回复:
引用 7 楼 bao110908 的回复:

一定要用正则表达式替换么?

没有,上次有个装B的说用正则能够实现。可是我弄死想不出来。
用其他什么方法实现最快?
主要是判读字符串中数字的问题


别去理他,这种人会了点皮毛就自以为精通了正则表达式!

使用字符数组是最快的实现方法。

#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


依旧蛋疼无比 String的replaceAll()方法的用法

#18


引用 15 楼 zangyunfei87 的回复:
正则表达式
       g            

#1


看不懂你说的啥意思··具体点··什么字母+数字?转为字母?

#2


我觉得这个问题用replaceAll恐怕没法实现,正则表达式虽然强大,但也不会是无所不能,比如楼主想要把5x转成5个x,那么repl要么是"$2$2$2$2$2"要么是"xxxxx"

所以还得用for来生成5个x是最适合的方案。

#3


 用正则。。。。。。。。。。。。。

#4


 用正则。。。。。。。。。。。。。

#5


引用 1 楼 cenhuineng 的回复:
看不懂你说的啥意思··具体点··什么字母+数字?转为字母?

比如输入"5X",运行后输出5个X
输入"3Y",运行后输出3个Y

#6


引用 2 楼 lingxuch 的回复:
我觉得这个问题用replaceAll恐怕没法实现,正则表达式虽然强大,但也不会是无所不能,比如楼主想要把5x转成5个x,那么repl要么是"$2$2$2$2$2"要么是"xxxxx"

所以还得用for来生成5个x是最适合的方案。

如果用"$2$2$2$2$2"那么换一个字母怎么实现。。。
主要是想知道怎么能在replacement中得到regex中数字的具体值

#7


一定要用正则表达式替换么?

#8


引用 7 楼 bao110908 的回复:
一定要用正则表达式替换么?

没有,上次有个装B的说用正则能够实现。可是我弄死想不出来。
用其他什么方法实现最快?
主要是判读字符串中数字的问题

#9


引用 8 楼 hyh11223 的回复:
引用 7 楼 bao110908 的回复:

一定要用正则表达式替换么?

没有,上次有个装B的说用正则能够实现。可是我弄死想不出来。
用其他什么方法实现最快?
主要是判读字符串中数字的问题


简单实用的方法最好,

#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;
}
}

#12


先获用正则获取数字,然后通过循环打印你的字母

#13


引用 8 楼 hyh11223 的回复:
引用 7 楼 bao110908 的回复:

一定要用正则表达式替换么?

没有,上次有个装B的说用正则能够实现。可是我弄死想不出来。
用其他什么方法实现最快?
主要是判读字符串中数字的问题


别去理他,这种人会了点皮毛就自以为精通了正则表达式!

使用字符数组是最快的实现方法。

#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


依旧蛋疼无比 String的replaceAll()方法的用法

#18


引用 15 楼 zangyunfei87 的回复:
正则表达式
       g