不熟悉Java的str.replace()方法引发的面试惨案

发布时间:2022-06-20 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了不熟悉Java的str.replace()方法引发的面试惨案脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

华为面试题,题目描述:

给定一组字符串和一个匹配模式,判断每一个字符串是否与该模式匹配,匹配则记为true,反之记为false,输出匹配结果。

匹配模式描述,对匹配模式中可以插入任意数量的小写字母但不允许插入大写字母能得到给定的字符串,例如:匹配模式为"FB",则可以匹配"aFsfsfBjkj"、"aDFBj",但不能匹配"FsdsFsaB";匹配模式为"FoBa",则可以匹配"FooosBauut",不能匹配"FaoBasds"、"FoJJGBasf"(解释:匹配模式中每个大写字母和其后面的小写字母为一个整体,不可分割)

注意:已保证输入的字符串和匹配模式均为大小写字母

 

面试时写出的代码:

package com.test.od;

import java.util.ArrayList;
import java.util.List;

public class OD2 {
    public static boolean[] deal(String[] strs, String partern){
        List<String> parterns = new ArrayList<>();
        boolean[] res = new boolean[strs.length];
//双指针法分割匹配模式
        int ptr1 = 0, ptr2 = 1;
        while (ptr2 < partern.length()){
            if (partern.charAt(ptr2) >= 'A' && partern.charAt(ptr2) <= 'Z'){
                parterns.add(partern.substring(ptr1, ptr2));
                ptr1 = ptr2;
            }
            ptr2++;
        }
        parterns.add(partern.substring(ptr1));
//挨个匹配
        for (int i = 0; i < strs.length; i++){
            res[i] = isContain(strs[i], parterns);
        }
        return res;
    }

    public static boolean isContain(String str,  List<String> patterns){
        for (String pattern : patterns){
//如果不全包含分割后的匹配模式,直接返回失败
            if (!str.contains(pattern)){
                return false;
            }
//!!!!!此处引发惨案!!!!
//原因:误以为replace()方法会自动将替换后的值赋值给str
//实际并不会,只是返回替换后的结果,所以此处替换相当于无效
//正确的应该是str = str.replaceFirst(pattern, "");


//匹配掉
           str.replaceFirst(pattern, "");
        }


//判断匹配后的字符串是否还包含大写字母

        for(char alb = 'A'; alb <= 'Z'; alb++){
            if (str.contains(String.valueOf((char)alb))){
                return false;
            }
        }
        return true;
    }


    public static void main(String[] args) {
        String[] strs = {"FooBar","FooBarTest","FootBall","FrameBuffer","ForceFeedBack"};
        String pattern = "FoB";
        boolean[] res = deal(strs, pattern);
        for (boolean r : res){
            System.out.PRintln(r);
        }
    }
}

  

脚本宝典总结

以上是脚本宝典为你收集整理的不熟悉Java的str.replace()方法引发的面试惨案全部内容,希望文章能够帮你解决不熟悉Java的str.replace()方法引发的面试惨案所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。