个人面试遇到的问题,不知道有没有好的方法,希望有看到的大佬点拨下:
package com.beitie.other;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
/**
* @description 描述
* @author betieforever
* @date 2021/10/14
*/ public class StringModel {
public static void main(String[] args) {
String str="java1 Java2 lll Java3 JAva4 ljsldjfljava5";
str=str.toLowerCase();
boolean flag = true;
int i=1;
Map<Integer,String> map = new HashMap<>();
while (flag){
//此处为大写的原因是下面要替换的是小写的java,如果不是替换后还是小写的,会影响后续操作
String repStr="JAVA"+i;
map.put(i,repStr);
if(str.contains("java")){
//因为要一个一个的标记要替换的java,每个待替换的都是不一样的,比如依次为JAVA1,JAVA2,JAVA3
str=str.replaceFirst("java",repStr);
i++;
}else{
flag=false;
}
}
System.out.println(str);
for (Integer a : map.keySet()) {
if(a%2==1){
str=str.replace(map.get(a),"java");
}else{
str=str.replace(map.get(a),"JAVA");
}
}
System.out.println(str);
}
}
最新方法来了,非常好的方法,谢谢新总了
使用Pattern和Match来进行替换
public static void main(String[] args) {
String str = "javaLjlj3JAVAjavAjdsljojkjafaJaVljaVATa";
Pattern pattern = Pattern.compile("java",Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(str);
StringBuffer sb = new StringBuffer();
int i = 0;
while (matcher.find()){
i++;
if((i & 1) == 0)
matcher.appendReplacement(sb,"JAVA");
else{
matcher.appendReplacement(sb,"java");
}
}
matcher.appendTail(sb);
System.out.println(sb.toString());
}