文字替换问题

zity_chow 2011-12-30 10:42:38
String str = "一二三四一二三四一二三四一二三四";
str = str.replace( "一", "零" );

如果这样,会把所有的“一”都替换成“零”。

请问怎样才能是替换前几个或者后几个“一”,或者替换第N个“一”
...全文
207 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
达布留西 2012-01-04
  • 打赏
  • 举报
回复
我觉得我们都不明白楼主什么意思,楼主你自己什么需求,自己改改吧,你的变动太大了
zity_chow 2012-01-04
  • 打赏
  • 举报
回复
如果替换的不是一个字,而是词组或者句子呢?[Quote=引用 19 楼 zhangguicheng12 的回复:]

那就把String 转换成数组
public static void main(String[] args) {
String shuzi="一二三四一二三四一二三四一二三四";
String[] shuzis=shuzi.split("");
String houshuzi="";//替换全部
for(int i=1;i<shuzis.length;i++){
if("一".e……
[/Quote]
张正 2012-01-02
  • 打赏
  • 举报
回复
public static String maths(String shuzi,int forward){
String[] shuzis=shuzi.split("");
String houshuzi="";//替换
int oneForward=0;//前面几个
if(forward!=0){
for(int i=1;i<shuzis.length;i++){
if(oneForward<forward){
if("一".equals(shuzis[i].toString())){
houshuzi+=shuzis[i].replace("一", "零");
oneForward++;
}else{
houshuzi+=shuzis[i];
}
}else{
houshuzi+=shuzis[i];
}
}
}
return houshuzi;
}
public static void main(String[] args) {
String shuzi="一二三四一二三四一二三四一二三四一二三四";
System.out.println(Test.maths(shuzi,2));//零二三四零二三四一二三四一二三四一二三四
}


向后也一样 !LZ自己发散


张正 2012-01-02
  • 打赏
  • 举报
回复
那就把String 转换成数组
public static void main(String[] args) {
String shuzi="一二三四一二三四一二三四一二三四";
String[] shuzis=shuzi.split("");
String houshuzi="";//替换全部
for(int i=1;i<shuzis.length;i++){
if("一".equals(shuzis[i].toString())){
houshuzi+=shuzis[i].replace("一", "零一");
}else{
houshuzi+=shuzis[i];
}
}
System.out.println(houshuzi);//零一二三四零一二三四零一二三四零一二三四
}


[Quote=引用 13 楼 zity_chow 的回复:]
引用 9 楼 licip 的回复:

String str = "一二三四一二三四一二三四一二三四";
for(int i = 0;i<3;i++){
str = str.replaceFirst( "一", "零" );
}
System.out.println("str:" + str);


这个如果我想替换的是:将“一”替换成“零一”呢
那么是不是变成“零零零一二三四一……
[/Quote]
zity_chow 2012-01-02
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 cs123456789dn 的回复:]

我也觉得找索引然后在替换这个是一个万能的方法
[/Quote]

请问怎样找索引?
zity_chow 2012-01-02
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 jaygo311 的回复:]

可以先检索,在替换,也可以将字符串按照所要替换的字符进行截取
[/Quote]

具体要怎样做,可以说清楚点吗?
Super_Ninja 2012-01-01
  • 打赏
  • 举报
回复
上面的这些写法都缺乏灵活性吧,只有在你非常清楚字符串的结构的情况下并且需要知道替换几个才行这样写还行,总觉得不好.
[Quote=引用 13 楼 zity_chow 的回复:]
引用 9 楼 licip 的回复:

String str = "一二三四一二三四一二三四一二三四";
for(int i = 0;i<3;i++){
str = str.replaceFirst( "一", "零" );
}
System.out.println("str:" + str);


这个如果我想替换的是:将“一”替换成“零一”呢
那么是不是变成“零零零一二三四一……
[/Quote]
对java有感觉 2012-01-01
  • 打赏
  • 举报
回复
我也觉得找索引然后在替换这个是一个万能的方法
jaygo311 2012-01-01
  • 打赏
  • 举报
回复
可以先检索,在替换,也可以将字符串按照所要替换的字符进行截取
zity_chow 2011-12-31
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 licip 的回复:]

String str = "一二三四一二三四一二三四一二三四";
for(int i = 0;i<3;i++){
str = str.replaceFirst( "一", "零" );
}
System.out.println("str:" + str);
[/Quote]

这个如果我想替换的是:将“一”替换成“零一”呢
那么是不是变成“零零零一二三四一二三四一二三四一二三四”了?
arvon009 2011-12-30
  • 打赏
  • 举报
回复
下面是替换前几个“一”的算法,若替换后几个“一”则需反循环
public String replaceWithSpecificString(String orignal, String oldStr,
String newStr, int times) {
String replce = "";

for (int i = 0; i < orignal.length(); i++) {
if (times > 0) {
if (orignal.charAt(i) == oldStr.charAt(0)) {
boolean match = true;
for (int j = 1; j < oldStr.length(); j++) {
if (orignal.charAt(i + j) != oldStr.charAt(j)) {
match = false;
break;
}
}

if (match) {
replce += newStr;
i += (oldStr.length() - 1);
times--;
}
} else {
replce += orignal.charAt(i);
}
} else {
replce += orignal.charAt(i);
}
}

return replce;
}

这是替换第N个‘一’的算法
public String replaceWithSpecificString(String orignal, String oldStr,
String newStr, int N) {
String replce = "";

for (int i = 0; i < orignal.length(); i++) {
if (N > 0) {
if (orignal.charAt(i) == oldStr.charAt(0)) {
boolean match = true;
for (int j = 1; j < oldStr.length(); j++) {
if (orignal.charAt(i + j) != oldStr.charAt(j)) {
match = false;
break;
}
}

if (match) {
if(N == 1) {
replce += newStr;
} else {
replce += orignal.charAt(i);
}

i += (oldStr.length() - 1);
N--;
}
} else {
replce += orignal.charAt(i);
}
} else {
replce += orignal.charAt(i);
}
}

return replce;
}
zity_chow 2011-12-30
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 huai__ye 的回复:]

采用字符串截取在替换的方式展开;
如: String str = "一二三四一二三四一二三四一二三四";
str= str.substring(0, 6).replace("一", "零")+str.substring(6, str.length());
结果:零二三四零二三四一二三四一二三四
[/Quote]
如果“一”的位置不确定呢?
孤雨 2011-12-30
  • 打赏
  • 举报
回复
自己随便指定个范围,然后就可以换了。应该没有现成的方法。
licip 2011-12-30
  • 打赏
  • 举报
回复
String str = "一二三四一二三四一二三四一二三四";
for(int i = 0;i<3;i++){
str = str.replaceFirst( "一", "零" );
}
System.out.println("str:" + str);
我嘞个去 2011-12-30
  • 打赏
  • 举报
回复
当然你也可以找索引 想换那个 换那个!
funfenffun 2011-12-30
  • 打赏
  • 举报
回复
String里面封装了一个replaceFirst()方法,替换字符串的第一个匹配,lz可以仿着这个的源码来写
应该没有什么封装好的方法,否则replaceFirst()就是鸡肋了
zysnba 2011-12-30
  • 打赏
  • 举报
回复
采用字符串截取在替换的方式展开;
如: String str = "一二三四一二三四一二三四一二三四";
str= str.substring(0, 6).replace("一", "零")+str.substring(6, str.length());
结果:零二三四零二三四一二三四一二三四

懒到变成虫 2011-12-30
  • 打赏
  • 举报
回复
这个前几个、后几个有什么规律吗?这样的需求只能自己定位进行查找替换了。
YeHuai1991 2011-12-30
  • 打赏
  • 举报
回复
采用字符串截取在替换的方式展开;
如: String str = "一二三四一二三四一二三四一二三四";
str= str.substring(0, 6).replace("一", "零")+str.substring(6, str.length());
结果:零二三四零二三四一二三四一二三四
zysnba 2011-12-30
  • 打赏
  • 举报
回复
要不就安装下标来替换
加载更多回复(1)

81,092

社区成员

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

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