Java从入门到精通 第5章 字符串

目录

创建字符串

连接字符串

获取字符串信息 

字符串操作

格式化字符串

使用正则表达式

字符串生成器

练习


创建字符串

  • 引用字符串常量
    • String a; a = "student";
    • 使用相同的字符串常量赋值给不同的变量,他们的地址是一样的(a==b),程序会在栈中查找存不存在常量,存在直接将地址赋给新的变量而不是重新在堆中创建对象
  • 利用构造方法
    • String a = new String("student")
    • String b = new String(a)
  • 利用字符数组实例化
    • String a = new String(char a[])
    • String a = new String(char a[], int offset, int length)
  • 利用字节数组实例化
    • String a = new String(byte a[])

连接字符串

  • 连接多个字符串
    • +
    • += 变量名字很长时,可读性高
  • 连接其他类型
    • 只有+运算符有一个操作数是字符串,编译器就会将另一个操作数转换为字符串(自动调用toString()方法)

获取字符串信息 

  • 获取字符串长度
    • str.length()
    • str.lastIndexOf(""); 空字符串在字符串里的索引等于字符串的长度
  • 字符串查找
    • str.indexOf(String s); 返回s在指定字符串中首次出现的索引位置,没有检索到返回-1
    • str.indexOf(String s, int fromIndex);
    • str.lastIndexOf(String s); 返回s搜索的字符串最后一次出现的位置,没有检索到返回-1
    • str.lastIndexOf(String s, int fromIndex);
  • 获取指定索引位置的字符
    • str.charAt(int index)

字符串操作

  • 获取子字符串
    • str.substring(int beginIndex); 返回从索引位置到结尾的子串
    • str.substring(int beginIndex, int endIndex); 返回从索引开始到结束的子串,长度为endIndex - beginIndex,不包括最后一个索引所指的字符
  • 去除字符串前后空格
    • str.trim();
  • 字符串替换
    • str.replace(char oldChar, char newChar); 替换字符或字符串,没有出现返回原字符串
    • str.replaceAll("\\s", ""); 去掉所有空格,前一个参数是正则表达式,后一个参数是替换的内容
  • 判断字符串的开始与结尾
    • str.startsWith(String prefix); 返回值为boolean类型
    • str.endsWith(String suffix);
  • 判断字符串相等
    • str.equals(String otherstr); ,返回boolean值
    • str.equalsIgnoreCase(String otherstr); 忽略大小写
  • 按字典顺序比较字符串
    • str.compareTo(String otherstr); 逐个比较字符串中的字符,如果str在otherstr之后,在之前返回一个负整数,在之后返回一个正整数,返回值为之前或之后的第几个位置。相等返回0
    • str.compareToIgnoreCase(String otherstr);
  • 字母大小写转换
    • str.toLowerCase();
    • str.toUpperCase(); 数字或非字符不受影响
  • 字符串分割
    • str.split(String sign); sign是分隔符,使用“|”定义多个分隔符,也可以使用正则表达式
    • str.split(String sign, int limit); limit限定分割次数,次数小于等于0、大于最大分割数全分割
    • split会匹配正则表达式,.表示匹配任意字符,所以需要使用\转义,而\本身也需要转义所以是\\.

格式化字符串

String类的静态方法formate()用于创建格式化的字符串。

  • 日期和时间字符串格式化
    • 需要导入import java.util.Date
    • Date date = new Date(); String s = String.formate(String form, date); s是格式化后的字符串
  • 常规类型格式化

使用正则表达式

  • 正则表达式元字符,这个元字符表示特定的字符集合
  • 使用方括号[]括起来表示一个元字符,该元字符可以代表元字符中的任何一个字符[abc]4代表a4、b4、c4
    • [^abc] 表示除abc之外的字符,^表示相反
    • [a-z] 表示a-z中任何一个字母,-表示范围
    • [a-e[g-z]] []中加[]表示并运算
    • [a-o&&[def]] &&表示交运算
    • [a-d&&[^bc]] &&结合^表示差运算
  • |表示或、&&表示交、[]表示其中的任意一个、^表示相反
  • 限定修饰符限定元字符出现次数
  • str.matchs(String regex); 返回boolean

字符串生成器

使用String创建的字符串其长度是固定的,使用+进行连接多个字符串时,会产生一个新的String实例,在内存中创建新的字符串对象,如果重复的对字符串进行修改,会极大的增加系统开销。JDK5新增了可变字符序列(String-Builder)类,大大的提高了频繁增加字符串的效率。

  • StringBuffer与StringBuider比较:
    • 提供兼容的API,但是StringBuider不保证线程同步,缺点是只能在单线程中使用,优点是不会给线程加锁

  • StringBuffer、StringBuider、String可以相互转换
    • String转换到StringBuffer或StringBuider使用构造方法new StringBuider(String)或new StringBuider(String)
    • StringBuffer、StringBuider转换到String使用toString()方法
    • StringBuffer与StringBuider方法相互转换先使用toString()方法转换为String再使用构造方法
  •  
  • StringBuilder builder = new StringBuider();
  • StringBuilder builder = new StringBuider("123");
  • StringBuilder builder = new StringBuider(32); 初始容量为32个字符
    • append(content); 添加内容,返回StringBuider对象,地址
    • insert(int offset, arg); 插入内容,返回StringBuilder对象
    • delete(int start, in end); 删除子串,返回StringBuider对象
    • setCharAt(int index, char ch); 无返回值
    • reverse(); 反序输出;
    • toString(); 返回String对象
    • 与String相似的方法
      • int lengt = builder.length(); 返回字符串长度
      • char chr = builder.charAt(int index); 获取指定索引的字符串
      • int index = builder.indexOf(String str); 获取指定字符串的索引
      • String substr = builder.substring(int beginIndex, int endIndex); 获取子串
      • StringBuider tmp = builder.replace(int beginIndex, int endIndex, String str); 替换指定字符序列(与String不同)
    • 其他类方法查询java.lang.StringBuilder的API说明
    •  
  • StringBuffer buffer = new StringBuffer(); 同StringBuider
package ex5_String;

public class ex5_28_Jerque {
    public static void main(String[] args) {
        String str = "";
        long starTime = System.currentTimeMillis();
        for (int i = 0; i < 10000; i++) {
            str += i;
        }
        long endTime = System.currentTimeMillis();
        System.out.println("time: " + (endTime - starTime));

        StringBuilder builder = new StringBuilder("");
        starTime = System.currentTimeMillis();
        for (int i = 0; i < 10000; i++) {
            builder.append(i);
        }
        endTime = System.currentTimeMillis();
        System.out.println("time: " + (endTime - starTime));
    }
}

练习

  • 写手机号的正则表达式
  • 使用字符串生成器追加字符
package ex5_String;

public class ex5_practice_3 {
    public static void main(String[] args) {
        String text = "12345678912";
        String regex = "1\\d{10}";
        System.out.println(text + " is " + text.matches(regex) + " phone number");

        StringBuilder builder = new StringBuilder("");
        for (int i = 1; i<=10; i++) {
            builder.append(i);
        }
        System.out.println(builder.toString());
    }
}
发布了46 篇原创文章 · 获赞 0 · 访问量 1034

猜你喜欢

转载自blog.csdn.net/weixin_37680513/article/details/103314197