计算926的9260次方里的字符串里有多少个926,并计算方法所花时间

  • 计算926的9260次方里的字符串里有多少个926
package StringTest;import java.math.BigDecimal;
import java.util.regex.Matcher;
import java.util.regex.Pattern;import static java.lang.Math.pow;public class String2 {public static void main(String[] args) {double a = pow(12, 2);System.out.println("a = " + a);System.out.println();//926的9260次方里的字符串里有多少个926int num1 = 926;String sub1 = String.valueOf(num1);String sub = "926";//BigDecimal bigDecimal = new BigDecimal(926);BigDecimal bigDecimal = new BigDecimal(sub1);//BigDecimal pow = bigDecimal.pow(9260);BigDecimal pow = bigDecimal.pow(num1 * 10);String string = pow.toString();System.out.println("string长度为 " + string.length());System.out.println();//方法1int count1 = countSub1(string, sub);System.out.println("count1 = " + count1);//0.002s~0.004sSystem.out.println();//方法2int count2 = countSub2(string, sub);System.out.println("count2 = " + count2);//0.002s~0.003sSystem.out.println();//方法3int count3 = countSub3(string, sub);System.out.println("count3 = " + count3);//0.001s}private static int countSub1(String string, String sub) {int count = 0;long begin = System.currentTimeMillis();Matcher matcher = Pattern.compile(sub).matcher(string);while (matcher.find()) {count++;}long end = System.currentTimeMillis();System.out.println("运行时间1 = " + (double) (end - begin) / 1000 + "s");return count;}private static int countSub2(String string, String sub) {int olcCount = string.length();long begin = System.currentTimeMillis();int newCount = string.replace(sub, "").length();int count = (olcCount - newCount) / sub.length();long end = System.currentTimeMillis();System.out.println("运行时间2 = " + (double) (end - begin) / 1000 + "s");return count;}private static int countSub3(String string, String sub) {long begin = System.currentTimeMillis();// 声明一个要返回的变量int count = 0;// 声明一个初始的下标,从初始位置开始查找int index = 0;// 获取主数据的长度int mainStrLength = string.length();// 获取要查找的数据长度int subStrLength = sub.length();// 如果要查找的数据长度大于主数据的长度则返回0if (subStrLength > mainStrLength) {return 0;}// 循环使用indexOf查找出现的下标,如果出现一次则count++while ((index = string.indexOf(sub, index)) != -1) {count++;// 从找到的位置下标加上要查找的字符串长度,让指针往后移动继续查找index += subStrLength;}long end = System.currentTimeMillis();System.out.println("运行时间3 = " + (double) (end - begin) / 1000 + "s");return count;}
}

在这里插入图片描述


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部