javaSE 字符串

一·String类

1.字符串

用双引号表示" "

String s="hello";

2.创建字符串

java语言中将字符串作为对象。创建对象要使用类的构造方法。String类的常用构造方法

1.String(char a[])

用一个字符数组创建String对象

char a={'h','e','l','l','o'};
String a=new String(a);
2.String(char a[],int offset,int length)

选取字符串的一部分创建一个字符串对象
offset:表示开始截取字符串的位置
length:表示截取字符串的长度

3.String(char[] value)

直接传入一个字符串构造

String s=new String("hello world");
4.通过字符串常量的赋值
String str1,str2; //字符串变量
str1="hello";   //通过字符串常量对字符串变量进行赋值
str2="world";

二·连接字符串

1.连接多个字符串

可以使用"+"运算符可以连接多个字符串

public class Demo {
    public static void main(String[] args) {
          String s1,s2,s;
          s1="hello";
          s2="world";
          s=s1+" "+s2;
          System.out.println(s);
    }
}

输出:hello world

2.连接其他数据类型

字符串可以和其他数据类型进行连接.连接时,会将这些数据直接转换成字符串

public class Demo {
    public static void main(String[] args) {
          int a=1;
          int b=2;
          System.out.println(a+"+"+a+"="+b);
    }
}

三·获取字符串信息

1.字符串长度

String类的length()方法

String str="hello";
int l=str.length();

2.字符串查找

(1)indexOf(String s)

indexOf方法返回的是搜索的字符或字符串首次出现的位置

str.indexOf(substr);
(2)lastindexOf(String s)

lastindexOf方法返回的是搜索的字符或字符串最后一次出现的位置

public class Demo {
    public static void main(String[] args) {
          String str="We are student";
          int l=str.length();
          int last=str.lastIndexOf("");
          System.out.println("空字符串最后一次出现的位置:"+last);
          System.out.println("字符串的长度:"+l);
    }
}

输出结果:
空字符串最后一次出现的位置:14
字符串的长度:14

3.获取指定索引位置的字符

str.charAt(int index);

四·字符串操作

1.获取子字符串

(1)substring(int beginindex)

返回从指定的索引位置到结尾的字符串

str.substring(int beginindex)
public class Demo {
    public static void main(String[] args) {
          String str="We are student";
          String substr=str.substring(6);  //想要获得必须赋值,并不能改变原有字符串
          System.out.println(substr);
    }
}

输出结果:
 student
(2).substring(int beginindex,int endindex)

获取指定开始位置到指定结束位置的字符串

str.substring(int beginindex,int endindex)

2.去除空格

ste.trim()

3.字符串替换

replace():可实现将指定的字符或字符串替换成新的字符或字符串

str.replace(char oldchar,char newchar)

4.判断字符串的开始与结尾

startswith()方法与endswith()方法分别用于判断字符串是否以指定的内容开始或结束

(1).startswith()

判断当前字符串对象的前缀是否为参数指定的字符串

str.startswith(String prefix)
(2).endswith()

判断当前字符串对象的后缀是否为参数指定的字符串

str.endswith(String suffix)
public class Demo {
    public static void main(String[] args) {
          String str="We are student";
          boolean b1=str.startsWith("We");
          boolean b2=str.endsWith("student");
          boolean b3=str.endsWith("We");
          System.out.println(b1);
          System.out.println(b2);
          System.out.println(b3);
    }
}

输出结果:
true
true
false

5.判断字符串是否相等

对字符串对象比较不能简单地使用比较运算符"==".
因为比较运算符比较的是两个字符串的地址是否相同。
即使两个字符串的内容相同,两个对象的内存地址也是不同的,使用比较运算符仍然返回false

    public static void main(String[] args) {
          String str1="We are student";
          String str2="We are student";
          String str3=new String("We are student");
          String str4=new String("We are student");
          boolean b1=(str1==str2);
          boolean b2=(str3==str4);
          System.out.println(b1);
          System.out.println(b2);
    }
}

输出结果:
true
false

比较两个字符串是否相等应使用equals()方法和equalsIgnoreCase()方法

(1).equals()

区分大小写

str.equals(String otherchar);
(2).equalsIgnoreCase()

不区分大小写

str.equalsIgnoreCase(String otherchar);

6.按字典序比较两个字符串

str.compareTo(String otherstar)

7.字母大小转换

(1)大写字母转为小写字母
str.toLowerCase()

将需要转换的字符进行转换,如果没有需要转换的字符则返回原字符串。

(2)小写字母转换为大写字母
str.toUpperCase()

将需要转换的字符进行转换,如果没有需要转换的字符则返回原字符串。

public class Demo {
    public static void main(String[] args) {
          String str1="We are student";
          String s1=str1.toLowerCase();    
          String s2=str1.toUpperCase();
          System.out.println(str1);   //不能改变原来的字符串
          System.out.println(s1);
          System.out.println(s2);

    }
}

输出结果:
We are student
we are student
WE ARE STUDENT

8.字符串分割

str.split()

使用spilt()方法可以使字符串按照指定的分割字符或字符串进行分割,并将分割后的结果存放在字符串数组中

(1).split(String sign)
str.split(String sign)

按照给定的分割符对字符串进行拆分.
没有统一的字符进行分割的符号。如果想定义多个分割符,可以使用符号"|".比如,“,|=”表示分割符分别为",“和”="

(2).split(String sign,int limit)
str.split(String sign,int limit)   //limit表示拆分限定次数
package com.demo;

public class Demo {
    public static void main(String[] args) {
          String str="192.168.1.10";
          String[] array1=str.split("\\.");  //要使用转义字符
          String[] array2=str.split("\\.",3);
          System.out.println("原来的str:"+"["+str+"]");
          System.out.println("全部分割结果:");
          for(String a:array1){
              System.out.print("["+a+"]");
          }
          System.out.println();
          System.out.println("分割两次");
          for(String a:array2){
              System.out.print("["+a+"]");
          }
          System.out.println();

    }
}

输出结果:
原来的str:[192.168.1.10]
全部分割结果:
[192][168][1][10]
分割两次
[192][168][1.10]

5.格式化字符串

(1).日期格式化
import java.util.Date;  //导入Date包
public class Demo {
    public static void main(String[] args) {
        Date date=new Date();
        String s=String.format("%te",date);  //对date进行格式化
        System.out.println(s); //输出的是当天的天数
    }
} //对date进行格式化

常用的日期格式化转化字符
%te :一个月的某一天
%tb : 指定语言环境的月份简称
%tB : 指定语言环境的月份全称
%ta : 指定语言环境的星期简称
%tA : 指定语言环境的星期全称
%tc : 全部日期和时间信息   星期三 九月 11 15:29:53 CST 2019
%tY : 4位年份
%tj : 一年中的第几天(001~366)
%tm : 月份(数字)
%td : 一个月中的第几天
%ty : 2位月份

(2).时间格式化

%tH : 2位数字的24时制的小时(00~23)
%tI: 2位数字的12时制的小时(01~12)
%tk : 24时制的小时(0~23)
%tl : 12时制的小时 (1~12)
%tM : 2位数字的分钟 (00~59)
%tS : 2位数字的秒数 (00~60)
%tL : 3位数字的毫秒数字 (000~999)
%tN : 9位数字的微秒数字(000000000~999999999)
%tp : 指定语言环境上午或下午标记
%tz : 相对于GMT RFC 82 格式的数字时区偏移量
%tZ : 时区缩写字符串 如:CST
%ts :1970-01-01 00:00:00至现在经过的秒数
%tQ : 1970-01-01 00:00:00至现在经过的毫秒数

(3).格式化常见的日期时间组合

%tF : ”年-月-日“ 格式 4位年份 2019-09-11
%tD : ”月/日/年”格式 09/11/19
%tc : 全部日期信息 星期三 九月 11 15:29:53 CST 2019
%tr : "时:分:秒 PM(AM)"格式 12时制
%tT :"时:分:秒 "格式 24时制
%tR : "时:分“ 24时制

(4)常规类型格式化

%b,%B : 结果被格式化为布尔类型
%h,%H : 结果被格式化为散列码
%s,%S :结果被格式化为字符串
%c,%C :结果被格式化为字符
%d : 结果被格式化为十进制整数
%o : 结果被格式化为八进制整数
%x,%X:结果被格式化为十六进制整数
%e : 结果被格式化为用计算机科学计数法表示的十进制数
%a : 结果被格式化为带有效位数和指数的十六进制浮点值
%%: 结果为%
%n:结果为特定平台的行分隔符

五·正则表达式

正则表达式通常被用于判断语句中,用来检查某一字符串是否满足一格式。
正则表达式含有一些具有特殊意义字符的字符串

元字符正则表达式中的写法意义
..代表任何一个字符
\b\\b匹配一个单词的边界,也就是指单词和空格间的位置.。例如,“er\b”可以匹配“never”中的“er”,但不能匹配“verb”中的“er”;“\b1_”可以匹配“1_23”中的“1_”,但不能匹配“21_3”中的“1_”
\B\\B匹配非单词边界。“er\B”能匹配“verb”中的“er”,但不能匹配“never”中的“er”。
\d\\d代表任何一个0~9的数字
\D\\D代表任何一个非数字字符
\s\\s代表非空白字符
\w\\w代表可用作标识符的字符,但不包括"$"
\W\\W代表不可用作表示符的字符
\p{Lower}\\p{Lower}代表小写字母a~z
\p{Upper}\\p{Upper}代表大写字母A~Z
\p{ASCII}\\p{ASCII}ASCII字符
\p{Alpha}\\p{Alpha}字母字符
\p{Dight}\\p{Dight}十进制数字,即0~9
\p{Alumn}\\p{Alumn}数字或字母字符
\p{Punct}\\p{Punct}标点符号!"#$等等
\p{Graph}\\p{Graph}可见字符:【\p{Alumn}\p{Punct}】
\p{Print}\\p{Print}可打印字符:【\p{Graph}\x20】
\p{Blank}\\p{Blank}空格或制表符:[\t]
\p{Cntrl}\\p{Cntrl}控制字符:[\x00-\x1F\x7F]

在正则表达式中“.”表示任何一个字符。如果想使用普通意义的字符“.”,就需要使用转义字符

在正则表达式中,可以使用方括号( [ ] )括起若干个字符来表示一个元字符,该元字符可代表方括号中的任何一个字符。
如:str="[abc]4",则a4,b4,c4都是可以和正则表达式匹配的字符串
方括号元字符的其他形式
[^456] : 表示4,5,6之外的任何字符
[a-r] :代表a~r中的任何一个字母
[a-zA-Z] : 可表示任何一个英文字母
[a-e[g-z]] : 代表a~e或g ~z 中的任何一个字母(并运算)
[a-o&&[def]] : 代表d,e,f (交运算)
[a-d&&[^bc]] : 代表a,d (差运算)

在正则表达式中可以使用限定修饰符来限定元字符出现的次数。
如: “A*” 表示 A可在字符串中出现 0次或多次

限定修饰符意义示例
?0次或1次A?
*0次或多次A*
+1次或多次A+
{n}正好出现n次A{2}
{n,}至少出现n次A{3,}
{n,m}出现n~m次A{2,6}
package com.demo;

import java.util.Date;
public class Demo {
    public static void main(String[] args) {
        String regex="\\w+@\\w+(\\.\\w{2,3})*";  //这里的+不是字符串连接的+而是表示可以出现一次或多次
        String str1="aaa@";
        String str2="aaaaaa";
        String str3="123@qq.com";
        if(str1.matches(regex))
            System.out.println(str1+"是一个合法E-mail地址");
        if(str2.matches(regex))
            System.out.println(str2+"是一个合法E-mail地址");
        if(str3.matches(regex))
            System.out.println(str3+"是一个合法E-mail地址");
    }
}

输出结果:
123@qq.com是一个合法E-mail地址

七·字符串生成器

创建成功的字符串对象,其长度是固定的,内容不能被改变和编译。虽然可以使用"+“达到附加的目的,但使用”+"会产生一个新的String序列,会在内存中创建新的字符串对象。如果重复地对字符串进行修改,将大大地加大系统开销。在J2SE 5.0新增了可改变的字符序列 String-Builder类,大大地提高了频繁增加字符串的效率

ublic class Demo {
    public static void main(String[] args) {
        String str="";
        long starttime=System.currentTimeMillis();
        for(int i=0;i<10000;i++)
               str+=i;
        long endtime=System.currentTimeMillis();
        System.out.println("String消耗时间:"+(endtime-starttime));
        StringBuilder builder=new StringBuilder("");
        starttime=System.currentTimeMillis();
        for(int i=0;i<10000;i++)
            builder.append(i);
        endtime=System.currentTimeMillis();
        System.out.println("StringBuilder消耗时间:"+(endtime-starttime));
    }
}

输出结果
String消耗时间:327
StringBuilder消耗时间:0

如果要频繁的附加字符串,建议使用StringBuilder。
新创建的StringBuilder对象的初始容量为16个字符,可以自行指定初始长度。如果附加的字符长度超过可容纳的长度,系统将自动增加长度。
若有输出StringBuilder最后的结果,可使用toString()方法。

下面介绍StringBuilder的添加,插入和删除方法

(1).append()
append(contect)   

contect表示要插入的内容,可以是任何类型的数据或其他对象

(2).insert()
insert(int offset,contect)

offser:表示要插入的位置
contect表示要插入的内容,可以是任何类型的数据或其他对象

(3).delete()
delete(int start,int end)

start:删除的开始位置
end:删除的结束位置
从start位置开始,一直索引到end-1的位置。如果不存在这种字符,则一直到序列尾部。

(4)setCharAt()

StringBuilder是可变字符序列,所以可以改变其中的某个字符

setChatAt(int index,char c)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值