Java算法-string API


字符串比较

compareTo是String类自带的方法,Integer也适用,比较两个字符串,并返回字符串中第一个字母ASCII的差值,当碰到不一样的字符串的时候就会立刻返回当前Ascll码差值。

public static void main(String[] args) throws Exception {

    String string ="123";
    String string2 ="124";
    Object object=string;
    System.out.println(string.compareTo(object.toString()));
    System.out.println(string.compareToIgnoreCase(string2));//忽略大小写
    System.out.println(string.compareTo(string2));
}

字符串出现的位置

   String string="4545465454654123";
   int intenger=string.lastIndexOf("123");
   int intenger=string.lastIndexOf(123);
	//同样使用于数字,若找不到则会返回-1
   System.out.println(intenger);

	//打印结果为:13

删除字符串当中的字符

我写了一个简单的方法,基于前面的基础,可以删除掉一个字符串内单个字符,或者是一个字符串。str.substring可以截取一段字符串。

public static void main(String[] args) throws Exception {

   String string="4545465454654123";
   String string2="123";
   int intenger=string.lastIndexOf(string2);
   int strlength=string2.length();
   System.out.println(intenger);
   System.out.println(ss(string,intenger,strlength));


}
public static String ss(String str, int number,int number2){
    return str.substring(0,number)+str.substring(number+number2);
}

输出结果:

13
4545465454654

替换字串当中的字符

public static void main(String[] args) throws Exception {

    String str="hello hello";
    String string=str.replace("l","0");//替换掉字符串当中所有的L
   //String string=str.replaceFirst("l","0"); 替换字符串当出现的第一个字符
    //String string=str.replaceAll("l","0"); 替换字符串当中所有字符,类似replace方法
    System.out.println(string);
}

字符串反转

reverse() 可将字符串反转:

  public static void main(String[] args) throws Exception {

    String str="hello hello";
    String str2=new StringBuffer(str).reverse().toString();
    System.out.println(str2);
}
打印结果:olleh olleh

字符串查找

public static void main(String[] args) {
  String strOrig = "Google Runoob Taobao";
  int intIndex = strOrig.indexOf("Runoob");
  if(intIndex == - 1){
     System.out.println("没有找到字符串 Runoob");
  }else{
     System.out.println("Runoob 字符串位置 " + intIndex);
  }
}

字符串分割

split(string) 方法通过指定分隔符将字符串分割为数组

public static void main(String args[]){
      
      String str = "www-runoob-com";
      String[] temp;
      String delimeter = "-";  // 指定分割字符
      temp = str.split(delimeter); // 分割字符串
      // 普通 for 循环
      for(int i =0; i < temp.length ; i++){
         System.out.println(temp[i]);
         System.out.println("");
      }
 
      System.out.println("------java for each循环输出的方法-----");
      String str1 = "www.runoob.com";
      String[] temp1;
      String delimeter1 = "\\.";  // 指定分割字符, . 号需要转义
      temp1 = str1.split(delimeter1); // 分割字符串
      for(String x :  temp1){
         System.out.println(x);
         System.out.println("");
      }
   }

方式二:
Java 中我们可以使用 StringTokennizer 设置不同分隔符来分隔字符串,默认的分隔符是:空格、制表符(\t)、换行符(\n)、回车符(\r)


import java.util.StringTokenizer;

public class Main {
public static void main(String[] args) {

    String str = "This is String , split by StringTokenizer, created by runoob";
    StringTokenizer st = new StringTokenizer(str);

    System.out.println("----- 通过空格分隔 ------");
    while (st.hasMoreElements()) {
        System.out.println(st.nextElement());
    }

    System.out.println("----- 通过逗号分隔 ------");
    StringTokenizer st2 = new StringTokenizer(str, ",");

    while (st2.hasMoreElements()) {
        System.out.println(st2.nextElement());
    }
}
}

字符串大小写转换

 String strUpper = str.toUpperCase();
//小转大
String strLower = str.toLowerCase();
//大转小

字符串区域是否相等

以下实例使用了 regionMatches() 方法测试两个字符串区域是否相等:

 public static void main(String[] args){
    String first_str = "Welcome to Microsoft";
    String second_str = "I work with microsoft";
    boolean match1 = first_str.
            regionMatches(11, second_str, 12, 9);
    boolean match2 = first_str.
            regionMatches(true, 11, second_str, 12, 9); //第一个参数 true 表示忽略大小写区别
    System.out.println("区分大小写返回值:" + match1);
    System.out.println("不区分大小写返回值:" + match2);
}

字符串创建的性能

	public class StringComparePerformance{
   public static void main(String[] args){      
      long startTime = System.currentTimeMillis();
      for(int i=0;i<50000;i++){
         String s1 = "hello";
         String s2 = "hello"; 
      }
      long endTime = System.currentTimeMillis();
      System.out.println("通过 String 关键词创建字符串" 
      + " : "+ (endTime - startTime) 
      + " 毫秒" );       
      long startTime1 = System.currentTimeMillis();
      for(int i=0;i<50000;i++){
         String s3 = new String("hello");
         String s4 = new String("hello");
      }
      long endTime1 = System.currentTimeMillis();
      System.out.println("通过 String 对象创建字符串" 
      + " : " + (endTime1 - startTime1)
      + " 毫秒");
   }
}

字符串优化

String.intern() 方法来优化字符串:

	public class StringOptimization {
    public static void main(String[] args){
        String variables[] = new String[50000];      
        for( int i=0;i <50000;i++){
            variables[i] = "s"+i;
        }
        long startTime0 = System.currentTimeMillis();
        for(int i=0;i<50000;i++){
            variables[i] = "hello";
        }
        long endTime0 = System.currentTimeMillis();
        System.out.println("直接使用字符串: "+ (endTime0 - startTime0)  + " ms" );
        long startTime1 = System.currentTimeMillis();
            for(int i=0;i<50000;i++){
            variables[i] = new String("hello");
        }
        long endTime1 = System.currentTimeMillis();
        System.out.println("使用 new 关键字:" + (endTime1 - startTime1) + " ms");
        long startTime2 = System.currentTimeMillis();
        for(int i=0;i<50000;i++){
            variables[i] = new String("hello");
            variables[i] = variables[i].intern();          
        }
        long endTime2 = System.currentTimeMillis();
        System.out.println("使用字符串对象的 intern() 方法: " 
        + (endTime2 - startTime2)
        + " ms");
    }
}

字符串格式化

import java.util.*;
 
public class StringFormat {
    public static void main(String[] args){
        double e = Math.E;
        System.out.format("%f%n", e);
        System.out.format(Locale.CHINA  , "%-10.4f%n%n", e);  //指定本地为中国(CHINA)
    }
}

小数精度

	Java当中如果想对数据的精度进行约束
  DecimalFormat df = new DecimalFormat("#0.0000000");//精度定义,小数点后几个0,表示保留几位小数
	  System.out.print(df.format(area));
将变量的值加入到df.fromat方法当中。

加入你想查看算法是否超超时可以用以下方法来获取程序运行的毫秒数
  long a=System.currentTimeMillis();
	  System.out.println(a);

字符串拼接效率

	public class StringConcatenate {
    public static void main(String[] args){
        long startTime = System.currentTimeMillis();
        for(int i=0;i<5000;i++){
            String result = "This is"
            + "testing the"
            + "difference"+ "between"
            + "String"+ "and"+ "StringBuffer";
        }
        long endTime = System.currentTimeMillis();
        System.out.println("字符串连接" 
        + " - 使用 + 操作符 : " 
        + (endTime - startTime)+ " ms");
        long startTime1 = System.currentTimeMillis();
        for(int i=0;i<5000;i++){
            StringBuffer result = new StringBuffer();
            result.append("This is");
            result.append("testing the");
            result.append("difference");
            result.append("between");
            result.append("String");
            result.append("and");
            result.append("StringBuffer");
        }
        long endTime1 = System.currentTimeMillis();
        System.out.println("字符串连接" 
        + " - 使用 StringBuffer : "
        + (endTime1 - startTime1)+ " ms");
    }
}