Java学习笔记——字符串

在这里插入图片描述

String类

声明字符串:
字符串是一个常量,可以显示任何文字信息,字符串的值在创建后不能更改。字符串的内容放在双引号中。如:”我是字符串”

声明:String str;

注意

在不给字符串变量赋值的情况下,其默认值是null,如果此时调用String方法,则会发生空指针异常。

创建字符串

1、 引用字符串常量

直接将字符串常量赋值给String类型变量。

String str=”hello world”;

String str1;

Str1=”hello world”;

2、 利用构造方法实例化
使用new关键字创建String对象。

String a=new String(“I love you”);
String b=new String(a);

3、 利用字符数组实例化
定义一个字符数组charArray,使用该字符数组创建一个字符串。

char[] charArray = {‘t’,’i’,’m’,’e’};
String a = new String(charArray);

4、 提取字符数组中的一部分创建字符串对象
定义一个字符数组charArray,从该字符数组索引3的位置开始,提取两个元素,创建一个字符串。

char[] charArray = {‘时’,‘间’,‘就’,‘是’,‘金’,‘钱’};
String a = new String(charArray,3,2);

代码示例

package  String_practice;
public class demo1 {
public static void main(String[] args) {
    // TODO Auto-generated method stub
    // 引用字符串常量创建
    String str1 = "科比,";
    // 构造方法创建
    String str2 = new String("作为NBA球员,");
    // 字符数组赋值创建
    char[] ch = { '你', '见', '过', '洛', '杉', '矶' };
    String str3 = new String(ch);
    // 截取字符数组创建
    char[] ch1 = { '我', '凌', '晨', '4', '点', '的', '样', '子', '吗', '颓' };
    String str4 = new String(ch1, 2, 7);
    // 输出字符串
    System.out.println(str1 + str2 + str3 + str4); 
}}

字符串的连接
对于已声明的字符串,可以对其进行操作。连接字符串是一种比较简单的操作字符串方式。连接字符串时,目标字符串既可以连接任意多个字符串,也可以连接其他数据类型的变量或者常量。

连接字符串

使用“+”运算符可以连接多个字符串并产生一个String对象。除了“+”运算符,“+=”同样可以实现字符串的连接。

注意

1、Java中相连的字符串不可以直接分成两行。
例如:System.out.println(“I like
Java”);
这种写法是错误的,若一个字符串太长,便于阅读,可以将字符串分在两行上书写。
此时可以用“+”将两个字符串串接起来。
即:System.out.println(“I like”+
“Java”);

2、String自带的concat()方法可以实现将指定的字符串连接到此字符串的结尾功能。
    语法如下:a.concat(str);
	     a:原字符串  
             str:原字符串末尾拼接的字符串              

连接其他数据类型

字符串也可以同其他基本数据类型进行连接。若将这些字符串同这些数据类型的数据进行连接会自动调用toString()方法,将其转化为字符串形式然后参与连接。

代码示例

package String_practice;
public class demo2 {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        // 探究字符串在计算公式中先后顺序对计算结果的影响
        String a = "1" + 2 +3 + 4;
        System.out.println("\"1\"+2+3+4" + " = " + a);
        String b = 1 + 2 + 3 + "4";
	System.out.println("1+2+3+\"4\"" + " = " + b);
 	String c = "1" + (2+ 3 + 4);
   	System.out.println("\"1\"+(2+3+4)" + " = " + c);
   }
  }

提取字符串信息

获取字符串的长度
Length()方法会返回字符数量,获取字符串长度,也就是char的数量。
语法:str.length();

String str = “12345 564”;
int size = str.length();

注意

字符串的length()方法与数组的length属性虽然都是用来获取长度的,但也不同。String的length()方法是类的成员方法,有括号;数组length属性是数组的一个属性,没有括号。

获取指定位置的字符
charAt(int index)方法用来获取指定索引的字符。
语法:str.charAt(index);
str:任意字符串对象 index:char值得索引

获取子字符串索引位置
indexOf()方法返回的是搜索的字符或字符串在字符串中首次出现的索引位置,如果没有检查到字符或字符串,则返回-1.
语法:str.indexOf(substr);

       str:任意字符串对象   substr:要搜索的字符或字符串

判断字符串首尾内容
startWith()方法和endsWith()方法分别用来判断字符串是否以指定的内容开始或结束。这两个方法返回值都是boolean类型

1、 startsWith(String prefix)方法
该方法用于判断字符串是否以指定的前缀开始
语法:str.startsWith(prefix);

2、 endsWith(String prefix)方法
该方法用于判断字符串是否以指定的前缀结束
语法:str.endsWith(prefix);

`获取字符数组
toCharArray()方法可以将字符串转换为一个字符数组。
语法:str.toCharArray();

判断子字符串是否存在
contains()方法可以判断字符串中是否包含指定的内容。
语法:str.contains(string);

代码示例:

package String_practice;
public class demo3 { 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String str = "床前明月光,疑是地上霜。举头望明月,低头思故乡";
        // 统计字符串的长度
        int length = str.length();
        System.out.println("字符串的长度为:" + length);
        // 获取指定位置的字符
        char c = str.charAt(4);
        System.out.println("字符串第四个位置上的字符为:" + c);
        // 获取子字符串位置的索引
        int index = str.indexOf("地上");
        System.out.println("“地上”在字符串中的位置索引为:" + (index + 1));
        // 判断字符串中是否存在字符
        int charindex = str.indexOf(',');
        if (charindex != -1)
            System.out.println("字符串中不含有‘,’");
        else
            System.out.println("字符串中含有‘,’");
        // 判断字符串中是否存在字符
        boolean request = str.contains("明月");
        System.out.println("字符串中有“明月”吗?" + request);
    }
}

字符串的操作

截取字符串
Substring()方法返回一个新的字符串,它是此字符串的一个子字符串。该子字符串从指定的beginIndex处字符开始,直到索引endIndex-1处的字符。
语法:str.substring(beginIndex);
str.substring(beginIndex,endIndex);

字符串替换
replace()方法可以实现将指定的字符序列替换成新的字符序列。
语法:str.replace(oldstr,newstr)
str:任意字符串 oldstr:要被替换的字符序列 newstr:替换后的字符序列

注意

replace()方法返回的是一个新的字符串。如果字符串str中没有找到需要被替换的子字符序列oldstr,则将原字符串返回。若出现多次,则会全部替换。

字符串的分割

split()方法可以根据给定的分隔符对字符串进行拆分,支持正则表达式,最后返回一个字符串数组。
语法:str.split(regex);
str:任意字符串 regex:分隔符表达式

大小写转换
1、 toLowerCase()方法
将字符串中所有的字符转化为小写字符
语法:str.toLowerCase();

2、 toUpperCase()方法
将字符串中所有的字符转化为大写字符
语法:str.toUpperCase();

去除空白内容
Trim()方法可以将字符串首尾处的空白内容都删除
语法:str.trim();

比较两个字符串是否相等
equals()方法比较两个字符串对象的内容是否相同。当且仅当进行比较的字符串不为null,并且与被比较的字符串内容相同时,结果才为true。
语法:a.equals(str);
注意:

> Stringstr=null;和String=””;是两个不同的概念。前者是空对象,没有指向任何引用的地址,
调用String的相关方法会抛出NullPointerException空指针异常;
“”是一个字符串,分配了内存空间,可以调用String的相关方法,只是没有显示任何东西而已。

可变字符串StringBuffer类

StringBuffer类是线程安全的可变字符序列,一个类似于String类字符串缓冲区,两者的本质是一样的,但是StringBuffer类执行的效率要比String类快。StringBuffer类创在的字符串是可修改的,且实体容量会随着存放的字符串增加而自动增加

创建StringBuffer类

创建一个StringBuffer对象必须用关键字new。

StringBuffer sbf = new StringBuffer();

StringBuffer sbf = new StringBuffer(“abc”);

StringBuffer sbf = new StringBuffer(32);

append()方法:

append()方法可将参数转换成字符串,然后追加到此序列中

语法:sbf.append(obj);
sbf:任意StringBuffer对象 obj:任意数据类型对象,例如String、int、double、Boolean等,都转变成字符串的表现形式

setCharAt( int index,char ch)方法
setCharAt()给指定索引处的字符修改为ch。
语法:sbf.setCharAt(index,ch);

insert(int offset,String str)方法
Insert()将字符串str插入到指定的索引值offset位置上。
语法:sbf.insert(offset,str);

delete(int start, int end)方法
delete()方法可移除此序列的子字符串中的字符。该子字符串是从指定的索引start处开始,一直到索引end-1处,如果end-1超出最大索引范围,则一直到序列尾部。若start等于end,则不发生任何更改。
语法:sbf.delete(start,end);

总结:

StringBuffer 与 String 的不同之处

String 只能赋值一次,每一次内容发生改变都生成一个新的对象,然后原有的对象引用新的对象,所以说String本身是不可变的。每一次改变String的字符串内容,都会在内存中创建新的对象,因此会对系统的性能产生影响,从而降低Java虚拟机的工作效率。
在这里插入图片描述

StringBuffer的每次操作都是自身对象,而不是生成新的对象。其所占的空间会随着字符的内容增加而扩充,做大量修改操作时,不会因生成大量匿名对象而影响系统性能。
在这里插入图片描述

发布了62 篇原创文章 · 获赞 42 · 访问量 3332

猜你喜欢

转载自blog.csdn.net/weixin_45375866/article/details/100163261