字符串替换问题

king3m 2007-09-25 09:11:55
求教!
给出字符串,例如q3t2abc应该替换数字右边的字符变成qttttaaabc.
再如12ra应该替换成1rrra。字符串最后数字不替换。
该是怎样的思路呀?
...全文
199 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
wshsm 2007-09-25
  • 打赏
  • 举报
回复
都是高手
shan1119 2007-09-25
  • 打赏
  • 举报
回复
String r = "q13t2abc";
Matcher m = Pattern.compile("([0-9])([a-z])").matcher(r);
while(m.find()){
int cnt = new Integer(m.group(1)).intValue();
String rep = m.group(2);
String str =new String(new char[cnt+1]).replaceAll(new String(new char[1]), rep);
r=r.replaceFirst(m.group(0),str);

}
System.out.println(r);
ddpie 2007-09-25
  • 打赏
  • 举报
回复
下面使用正则表达式实现的^o^

package com.ddpie;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class TestStrRegex {

public static String parse(String in){
StringBuffer out = new StringBuffer();
Pattern pattern = Pattern.compile(
"(.*?)([0-9])([a-zA-Z])(.*?)",Pattern.DOTALL);
Matcher matcher = pattern.matcher(in);
int tailIndex = 0;
while(matcher.find()){
out.append(matcher.group(1));
int intValue = Integer.parseInt(matcher.group(2));
for(int i=0 ; i<=intValue ; i++){
out.append(matcher.group(3));
}
tailIndex = matcher.start(4);
}
out.append(in.substring(tailIndex));
return out.toString();
}

public static void main(String[] args){
String in = "q3t2abc";
System.out.println(TestStrRegex.parse(in));
}
}
daniel_kaka 2007-09-25
  • 打赏
  • 举报
回复
public static String apprendString(String srcString){
if (srcString == null || srcString.trim().length() == 0){
return "";
}
Pattern pattern = Pattern.compile("(\\d[a-zA-Z])");
Matcher matcher = pattern.matcher(srcString);

int start = 0;
StringBuilder sb = new StringBuilder("");
while (matcher.find(start)){
String tmp = matcher.group(1);
int index = srcString.indexOf(tmp,start);
int nextStart = index + tmp.length();
sb.append(srcString.substring(start, index));
int n = Integer.parseInt(Character.toString(tmp.charAt(0)));
for (int i = 0; i <= n; i ++){
sb.append(tmp.charAt(1));
}

start = nextStart;
}
sb.append(srcString.substring(start));
System.out.println(sb.toString());

return sb.toString();
}
ddpie 2007-09-25
  • 打赏
  • 举报
回复
没有优化,代码如下,希望对你有点帮助

package com.ddpie;

public class TestStr {
public static String parse(String in){
if(in==null || in.trim().length()==0)
return "";
StringBuffer out = new StringBuffer();
for(int i=0 ; i<in.length()-1 ; i++){
char c1 = in.charAt(i);
int type1 = Character.getType(c1);
char c2 = in.charAt(i+1);
int type2 = Character.getType(c2);
if(type1!=9){//不是数字
out.append(c1);
continue;
}
if(type2==9){//是数字
out.append(c1);
continue;
}
int valueOfC1 = Integer.parseInt(new Character(c1).toString());
for(int j=0 ; j<valueOfC1 ; j++){
out.append(c2);
}
}
out.append(in.charAt(in.length()-1));
return out.toString();
}
public static void main(String[] args){
String str = "";
// str = "q3t2abc";
str = "12ra";
System.out.println(TestStr.parse(str));
}
}
伍子V5 2007-09-25
  • 打赏
  • 举报
回复
求思路啊
看看正则表达式
king3m 2007-09-25
  • 打赏
  • 举报
回复
谢谢大家。我初学java。真是长见识呀
chg2008 2007-09-25
  • 打赏
  • 举报
回复
不用正则表达式也可以嘛
chb865 2007-09-25
  • 打赏
  • 举报
回复
String str = "q3t2abc5";
String tempStr = "";
String tempChar = "";
if (Character.isLetter(str.charAt(str.length() - 1)))
tempChar = "" + str.charAt(str.length() - 1);
tempStr = ""+str.charAt(str.length() - 1);
for (int i = str.length() - 2; i >= 0; i--) {
char c = str.charAt(i);
if (Character.isLetter(c)) {
tempChar = "" + c;
tempStr = c + tempStr;
} else {
int n = (int) c - 48;
for (int j = 0; j < n; j++) {
tempStr = tempChar + tempStr;
}
}
}
System.out.println(tempStr);

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧