zoukankan      html  css  js  c++  java
  • Java—字符串

    • 字符串

      在java中,字符串被作为String类型的对象处理。String类位于java.lang包中,默认情况下,该包被自动导入所有的程序。

      创建String对象的方法:

    String s1 = "java";
    String s2 = new String();
    String s3 = new String("Java");
    1. Java字符串的不变性

      String对象创建后不能被修改,是不可变的,所谓的修改其实是创建了新的对象,所指向的内存空间不同。

      如果需要一个可以改变的字符串可以使用StringBuffer或者StringBuilder。

      每次 new 一个字符串就是产生一个新的对象,即便两个字符串的内容相同,使用 ”==” 比较时也为 ”false” ,如果只需比较内容是否相同,应使用 ”equals()” 方法。

      常量池在Java中是用于保存在编译期已确定的、已编译的class文件中的数据。

    package cn.test;
    
    public class Demo12 {
        public static void main(String[] args) {
            String s1 = "java";//先检查字符串常量池中是否有"java"字符串,如果有则直接指向,如果没有就在字符串常量池中添加"java"字符串并指向它,所以这种方式创建字符串时最多创建一个对象,或者不创建对象
            String s2 = "java";//s2直接指向字符串常量池中的"java"
            String s3 = new String("java");//在堆内存申请一块内存存储字符串"java",s3指向其内存块对象,同时检查字符串常量池中是否有"java"字符串,如果没有就添加字符串"java"到常量池中,所以new String()有可能创建两个对象
            String s4 = new String("java");
            System.out.println(s1 == s2);
            System.out.println(s1 == s3);
            System.out.println(s3 == s4);
            s1 = "欢迎来到" + s1;
            System.out.println(s1);
            System.out.println(s3.equals(s4));
        }
    }

      执行结果:  

      true
      false
      false
      欢迎来到java
      true

    • String类常用的方法

       举例1:

    String fileName = "HelloWorld.java"; 
    String email = "xiaoli@163.com";
            
    // 判断.java文件名是否正确:合法的文件名应该以.java结尾
    int index = fileName.lastIndexOf('.');  
    String prefix = fileName.substring(index+1);
    if ( index > 0 && prefix.equals("java")) {
        System.out.println("Java文件名正确");
    } else {
        System.out.println("Java文件名无效");
    }
    
    // 判断邮箱格式是否正确:合法的邮箱名中至少要包含"@", 并且"@"是在"."之前
    int index2 = email.indexOf('@');    
    int index3 = email.indexOf('.');
    if (index2 != -1 && index3 > index2) {
        System.out.println("邮箱格式正确");
    } else {
        System.out.println("邮箱格式无效");
    }

      String str = "boo:and:foo";
      String[] arr = str.split(":");
      for (int i = 0; i < arr.length; i++)
      {
        System.out.print(arr[i]);
      }

       执行结果: 

      Java文件名正确
      邮箱格式正确
      booandfoo

      举例2:

    String str = "abcd阿";
    byte[] b = str.getBytes();
    for (int j = 0; j < b.length; j++) {
        System.out.print("[" + b[j] + "]");
    }

      运行结果:

      [97][98][99][100][-80][-94]

      注:1 个字节等于 8 位, gbk 编码中 1 个汉字字符存储需要 2 个字节,1 个英文字符存储需要 1 个字节

      示例3:

    String s = "aljlkdsflkjsadjfklhasdkjlflkajdflwoiudsafhaasdasd";
            
    // 出现次数
    int num = 0;
            
     // 循环遍历每个字符,判断是否是字符 a ,如果是,累加次数
    for (  int i = 0;i < s.length(); i++ )
    {
     // 获取每个字符,判断是否是字符a
        if (  s.charAt(i) == 'a' ) {
         // 累加统计次数
        num++; 
        }
    }
    System.out.println("字符a出现的次数:" + num);

      运行结果:

      字符a出现的次数:8

    •  StringBuilder类

      String类具有可变性,频繁操作字符串时会产生很多临时变量,使用StringBuilder或StringBuffer就可以避免这个问题。它们基本相似,不同之处是StringBuffer是线程安全的,所以性能略高。因此,一般情况下创建一个内容可变的字符串对象,优先使用StringBuilder类。

    StringBuilder str2 = new StringBuilder("java");

      StringBuilder类的常用方法:

      注:String str = "a" + s; 其效率与 String str = new StringBuilder().append("a").append(s).toString();是一样的。

      关于‘+’的原理,参考:http://blog.csdn.net/zengshunyao/article/details/40023577

  • 相关阅读:
    mysql备份还原
    java-mysql(3) 读写image
    java-mysql(2) Prepared statement
    java-mysql(1)
    jmeter报告分析工具
    浏览器下载img标签Base64图片
    Java定时器TimeTask
    js倒计时
    h5语音播放(移动端)
    Linux环境下在Tomcat上部署JavaWeb工程
  • 原文地址:https://www.cnblogs.com/tianxintian22/p/6596904.html
Copyright © 2011-2022 走看看