不熟悉Java的str.replace()方法引发的面试惨案
2022/4/9 9:49:01
本文主要是介绍不熟悉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()方法引发的面试惨案的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-19永别了,微服务架构!
- 2024-05-15鸿蒙生态设备数量超8亿台
- 2024-05-13TiDB + ES:转转业财系统亿级数据存储优化实践
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?