Java 中判断一个字符串是否包含另外一个字符串的方法
方法一:indexOf(String s)
可以配合indexOf(String s)的使用,如果包含,返回的值是包含該子字符串在父類字符串中起始位置;如果不包含必定全部返回值為-1
public void test02() {String str1="張三";String str2="是一個(gè)張三大笨蛋";if(str2.indexOf(str1)!=-1) {System.out.println("存在包含關(guān)系");}else {System.out.println("不存在包含關(guān)系");}}方法二:contains()
String類型有一個(gè)方法:contains(),該方法是判斷字符串中是否有子字符串。如果有則返回true,如果沒有則返回false。
package api.api;public class App1 {public static void main(String[] args) {String num = "WKCON190400111";if (num.contains("CON")) {System.out.println(1);} else {undefinedSystem.out.println(2);}} }輸出結(jié)果: 1String.indexOf與String.contains效率測(cè)試
String.indexOf與String.contains都是判斷字符串是否包含另一個(gè)字符串的方法。String.indexOf存在返回第一個(gè)字符索引位置,不存才返回-1;String.contains存在返回true,不存在返回false。
現(xiàn)在測(cè)試兩個(gè)方法的效率,不區(qū)分大小寫判斷。一個(gè)字符串判斷是否含有48個(gè)單詞中的單詞,執(zhí)行一百萬(wàn)次。
結(jié)論 : String.indexOf 效率更高。 (或許我的測(cè)試方法有誤,歡迎指正)
先上結(jié)果,如下
1000000*48 次 String.contains 耗時(shí):4691 ms 1000000*48 次 String.indexOf 耗時(shí):31 ms ^str1:全部存在(小寫)-------------------------------------------------------------------1000000*48 次 String.contains 耗時(shí):3735 ms 1000000*48 次 String.indexOf 耗時(shí):17 ms ^str2:全部存在(大寫)-------------------------------------------------------------------1000000*48 次 String.contains 耗時(shí):37 ms 1000000*48 次 String.indexOf 耗時(shí):14 ms ^str3:部分存在------------------------------------------------------------------------1000000*48 次 String.contains 耗時(shí):17 ms 1000000*48 次 String.indexOf 耗時(shí):14 ms ^str4:不存在(數(shù)字、字符、字母)----------------------------------------------------------1000000*48 次 String.contains 耗時(shí):16 ms 1000000*48 次 String.indexOf 耗時(shí):16 ms ^str5:不存在(字母)--------------------------------------------------------------------1000000*48 次 String.contains 耗時(shí):17 ms 1000000*48 次 String.indexOf 耗時(shí):14 ms ^str6:不存在(數(shù)字)--------------------------------------------------------------------1000000*48 次 String.contains 耗時(shí):17 ms 1000000*48 次 String.indexOf 耗時(shí):14 ms ^str7:不存在(字符)--------------------------------------------------------------------測(cè)試代碼如下
public class StringContainsOrIndexOfVelocity {private static final String base = "article.add,article.update,article.delete,article.view," +"category.add,category.update,category.delete,category.view," +"user.add,user.update,user.delete,user.view," +"role.add,role.update,role.delete,role.view," +"news.add,news.update,news.delete,news.view," +"category.add,category.update,category.delete,category.view," +"Threading.add,Threading.update,Threading.delete,Threading.view," +"System.add,System.update,System.delete,System.view," +"Generic.add,Generic.update,Generic.delete,Generic.view," +"Collections.add,Collections.update,Collections.delete,Collections.view," +"Tasks.add,Tasks.update,Tasks.delete,Tasks.view," +"CslApp.add,CslApp.update,CslApp.delete,CslApp.view";private static final String[] bases = base.toUpperCase().split(",");private static final String str1 = base;private static final String str2 = base.toUpperCase();private static final String str3 = "ns.add,Collections.update,Collections.delete,Collections.ving.add,Threading.update,Threading.delete,Threading.add,role.update,role.delete,role.vietions.1";private static final String str4 = "klsjflsjdfoadsfi;jadls;fjoashgewnaiefahefoia274923472395674358920374uy3fh2f92yfh02ydsuhawe9f''''''//>>>>><<<~~~~!!@#$%^&&hrhfa8fewy7rt23984g23fhaiouf";private static final String str5 = "skdhlskdjfasd;faioegneohfaeofjaoeihfjaopihfeoasmgvlandihfawieughfyoiebfinlkjdsfoiajheiohioejfaesafkhjasdhflakdjsfasdfaldfadfsdjflsfjaldfjlajdflajldjflkaf";private static final String str6 = "239875824368517230941327041230740471674083295738473297589327492347239567435892037409827304203406324672937027394623764170324671324891748192374937489273489";private static final String str7 = "`--==-`-=-=-`=-`=-`==-@#$%^&*((*&^%$#$#$@#@##!@#$$%&^*()()())>><:;'''''''//>>>>><<<~~~~!!@#$%^&&*@#$%^&*()#$%^&*(*&^%$#@#$%^&*(*&^%$#@!@#$%^&*(*&^%$#";public static void main(String[] args) {int count = 1000000;test(str1, count);System.out.println("^str1:全部存在(小寫)-------------------------------------------------------------------");System.out.println();test(str2, count);System.out.println("^str2:全部存在(大寫)-------------------------------------------------------------------");System.out.println();test(str3, count);System.out.println("^str3:部分存在------------------------------------------------------------------------");System.out.println();test(str4, count);System.out.println("^str4:不存在(數(shù)字、字符、字母)----------------------------------------------------------");System.out.println();test(str5, count);System.out.println("^str5:不存在(字母)--------------------------------------------------------------------");System.out.println();test(str6, count);System.out.println("^str6:不存在(數(shù)字)--------------------------------------------------------------------");System.out.println();test(str7, count);System.out.println("^str7:不存在(字符)--------------------------------------------------------------------");}private static void test(String str, int count) {str = str.toUpperCase();long t = System.currentTimeMillis();for (int i = 0; i < count; i++) {for (String s : bases) {if (str.contains(s)) {}}}long t2 = System.currentTimeMillis();System.out.println(count + "*" + bases.length + " 次 String.contains 耗時(shí):" + (t2 - t) + " ms");for (int i = 0; i < count; i++) {for (String s : bases) {if (str.indexOf(s) != -1) {}}}long t3 = System.currentTimeMillis();System.out.println(count + "*" + bases.length + " 次 String.indexOf 耗時(shí):" + (t3 - t2) + " ms");}}List.contains和String.contains的區(qū)別
如果不把List里的元素遍歷出來(lái)再用contains過濾關(guān)鍵字,直接用List.contains其效果其實(shí)是底層遍歷List會(huì)用equals去匹配,效果是嚴(yán)格的判相等的方法。
而String.contains是用數(shù)組去截取每段內(nèi)容輪流匹配,類似于模糊查詢的效果。
總結(jié)
以上是生活随笔為你收集整理的Java 中判断一个字符串是否包含另外一个字符串的方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux内核杂记(5)-进程终结
- 下一篇: Java面试题整理(附参考答案)