String类
1、String的概述
(1) String 是Java给提供的一个用来操作字符串的类。它在lang 包下,故使用的时候不需要导包。
(2) String 类使用final 来修饰的,故不可被继承
(3) String 字符串创建的对象是不可变且不可以被修改,原因是字符串只提供了构造器来初始化创建字符串,但是没有提供set 方法来修改设置的字符串的值。
(4) 通常使用赋值的形式创建字符串是一个常量存放至字符串常量池中,好处能够快速获取。
2、创建字符串的方式以及字符串的构造器的用法
(1) String(byte[] by); 将字节码表示的字符解码成对应的字符串表示形式;
String st = “abcd为”;
//将字符串转换成字节数组表示形式,即字符串的编码操作
byte[] by = st.getBytes();
System.out.println(Arrays.toString(by));
//将直接数组表示的字符串解码成对应的字符串
String str = new String(by);
System.out.println(str);
(2) String(byte[] bytes, Charset charset); 第一个参数是需要解码的字节数组,第二个参数是解码的方式、如UTF-8 、GBK
byte[] by = {12,34,56,67,-90,-34};
String st = new String(by,“GBK”);
System.out.println(st);
(3) String(byte[] by,int offset,int length); //第一个参数是需要解码的字节数组,第二个是指定字节数组解码的初始索引位置,第三个参数是,解码的长度。
byte[] by = {12,34,56,67,-90,-34};
String st = new String(by,2,3); //包含指定位置的初始索引对应的字符
System.out.println(st);
(4)String(char[] ch); 将指定的字符数组转换成对应 的字符串;
char[] ch = {‘a’,‘2’,‘我’,‘t’};
String st = new String(ch);
System.out.println(st);
(5)String st = “我是字符串!”; 直接定义一个字符串常量,是最常用的创建字符串对象的方式。
3.String 类常用方法
1.charAt(int index) 获取指定索引位置的字符
String st = "hdsjsjds";
char ch = st.charAt(3);
System.out.println(ch); //输出j
2、求字符串长度
public int length()//返回该字符串的长度
String str = new String("asdfzxc");
int strlength = str.length();//strlength = 7
3、单个字符的查找
indexOf(String ch); 获取ch 在该字符串对象中第一次出现的索
lastIndexOf(String ch) 返回ch 在该字符串对象中最后一次出现的索引位置;
4、获取当前字符串长度
length() ; 获取当前字符串对象的长度;
5、提取子字符串
substring(int beginIndex); 获取从指定索引处到字符串末尾截取的字符串的子串;
substring(int beginIndex, int endIndex); 获取从指定索引位置开始到指定索引位置结束的字符串的子串。(包括左边 不包括右边)
6、字符串中字符的大小写转换
1)public String toLowerCase()//返回将当前字符串中所有字符转换成小写后的新串
2)public String toUpperCase()//返回将当前字符串中所有字符转换成大写后的新串
7、对字符串进行分割
String[] split(String str)//将str作为分隔符进行字符串分解,分解后的字字符串在字符串数组中返回。
1 String str = "asd!qwe|zxc#";
2 String[] str1 = str.split("!|#");//str1[0] = "asd";str1[1] = "qwe";str1[2] = "zxc";
8、去除首位空格
String trim()//截去字符串两端的空格,但对于中间的空格不处理。
9、判断是否被包含
contains(String str)//判断参数s是否被包含在字符串中,并返回一个布尔类型的值。
String str = "student";
str.contains("stu");//true
str.contains("ok");//false
10、对字符串的比较
(1) contains(CharSequence s) 判断指定的字符串是否包含 s中戈丁的字符串序列;
String st = “hgasjhellosakkjslk”; //创建字符串实例
boolean bo = st.contains(“hello”);
System.out.println(bo); //true
bo = st.contains(“helloworld”);
System.out.println(bo); //false
(2)endsWith(String suffix); 判断字符串是否以指定的字符串结尾;该方法在匹配字符串的是否从后往前匹配。
String st = “hello.jpg”;
boolean bo = st.endsWith(".jpg");
System.out.println(bo);//true
(3)equals(Object anObject); 比较两个字符串是否相等;
String st = “hello”;
String st1 = “hello”;
System.out.println(st.equals(st1)); //true
System.out.println(st == st1); // false
先拼接后写入,最后两个字符串指向同一个位置
String st2 = “hello” + “world”;
String st3 = “helloworld”;
System.out.println(st2.equals(st3)); //true
System.out.println(st2 == st3); // true
String st4 = “world”;
String st5 = st + st4;
System.out.println(st3.equals(st5)); //true
因为在字符串是不可变的,所以在两个字符串对象拼接的时候, 会使用StringBuilder来拼接成新的字符串后再写入到内存中,故地址发生了变化
System.out.println(st3 == st5); // false
//该种创建字符串的方式创建的字符串对象是存放到堆中的。
String st6 = new String(“helloworld”);
//字符串重写了equals 方法
System.out.println(st3.equals(st6)); //true
System.out.println(st3 == st6); // false
String st7 = new String(“demo”);
(4)equalsIgnoreCase(String anotherString) ; 忽略字符的大小写来比较两个字符串是否相等。
String st = “hello”;
String st8 = “HELLO”;
System.out.println(“iGnor” + st8.equalsIgnoreCase(st));
(5)startsWith(String prefix);参看一个字符串是否以指定的字符串开头,从头开始匹配;
String s = “day12.doc”;
boolean bo = s.startsWith(“day”);
System.out.println("startsWith : " + bo);
(6)isEmpty(); 判断字符串的长度是否为0;如果长度为0 返回true
4.对String使用的综合
package com.baidu.day11;
import java.util.Arrays;
import java.util.Scanner;
import org.junit.Test;
//1.编写程序将 “jdk” 全部变为大写,并输出到屏幕,截取子串”DK” 并输出到屏幕
public class Work13 {
@Test
public void demo1(){
String c=new String();
c="jdk";
//转化为大写
String a=c.toUpperCase();
System.out.println(a);
System.out.println(a.substring(1, 3));
}
//2.写一个方法判断一个字符串是否对称
@Test
public void demo2(){
Scanner sc=new Scanner(System.in);
System.out.println("输入一个字符串");
String a=sc.next();
//将字符串放入字符数组之中
char[]c=a.toCharArray();
//判断是否对称
boolean x=true;
for(int i=0;i<a.length();i++){
if(c[i]==c[a.length()-i-1]){
x=false;
}else{
System.out.println("不是对称的");
break;
}
}
if(x==false){
System.out.println("是对称的");
}
}
//3.编写一个程序,将下面的一段文本中的各个单词的字母顺序翻转:
//“To be or not to be",将变成"oT eb ro ton ot eb"。
@Test
public void demo3(){
String num="To be or not to be";
//将字符串以空格分割
String []a=num.split(" ");
for(int i=0;i<a.length;i++){
StringBuilder s=new StringBuilder(a[i]);
System.out.print(s.reverse()+" ");
}
}
//4.String s=”name=zhangsan age=18 classNo=090728”;
//将上面的字符串拆分,结果如下:zhangsan 18 090728
@Test
public void demo4(){
String s="name=zhangsan age=18 classNo=090728";
//以空格分割
String []a =s.split(" ");
for (int i = 0; i < a.length; i++) {
//找出=的下标
int in=a[i].indexOf("=");
System.out.print(a[i].substring(in+1)+" ");
}
}
//5. 使用两种方法把这个字符串中的单词首字母转为大写:
//String str = “hello Java and Android!”
@Test
public void demo5(){
String s="hello Java and Android!";
String []a=s.split(" ");
for(int i=0;i<a.length;i++){
//将第一个转化为大写,之后的转化为小写
a[i]=a[i].substring(0, 1).toUpperCase()+a[i].substring(1, a[i].length());
}
for (int i = 0; i < a.length; i++) {
System.out.print(a[i]+"\t");
}
}
// /6、编程. 已知字符串:"this is a test of java".
// 按要求执行以下操作:
// (1) 统计该字符串中字母s出现的次数
// (2) 取出子字符串"test"
// (3) 用多种方式将本字符串复制到一个字符数组Char[] str中.
// (4) 将字符串中每个单词的第一个字母变成大写, 输出到控制台。
// (5) 用两种方式实现该字符串的倒叙输出。(用StringBuffer和for循环方式分别实现)
// (6) 将本字符串转换成一个字符串数组,要求每个数组元素都是一个有意义的额英文单词,并输出到控制台
@Test
public void demo6(){
String num="this is a test of java";
//将字符串转换为字符数组
char [] a=num.toCharArray();
int x = 0;
for(int i=0;i<a.length;i++){
if(a[i]=='s'){
x++;
}
}
System.out.println(x);
//分割字符串
String[]b=num.split(" ",num.length());
for (int i = 0; i < b.length; i++) {
if(b[i].equals("test")){
System.out.println(b[i]);
}
//将下表为0的大写 加上下标1到字符串最后的小写
b[i]=b[i].substring(0,1).toUpperCase()+b[i].substring(1,b[i].length());
}
for (int i = 0; i < b.length; i++) {
System.out.print(b[i]+"\t");
}
StringBuilder s1=new StringBuilder();
s1.append(num).reverse();
System.out.println("\n"+s1);
}
@Test
public void demo7(){
System.out.println("请输入一个字符串");
Scanner sc=new Scanner(System.in);
String a=sc.next();
//找到第一个*的下标
int x=a.indexOf("*");
//最后一个*的下标
int x1=a.lastIndexOf("*");
if(x==0||x1==a.length()-1){
a=a.substring(1, a.length()-1);
System.out.println(a);
}
}
}