Java-字符串

String类

  • 声明字符串:“”
  • 创建字符串
    构造方法一:String(char a[]);用一个字符数组a创建String对象
    char a[]={‘g’,‘o’,‘o’,‘d’};
    String s=new String(a);
    等价于String s=new String(“good”);
    构造方法二:String(char a[],int offset,int length);
    char a[]={‘s’,‘t’,‘y’,‘d’,‘e’,‘n’,‘t’};
    String s=new String(a,2,4);
    等价于Sring s=new String(“uden”);
    构造方法三:String(char[] value);
    char a[]={‘s’,‘t’,‘y’,‘d’,‘e’,‘n’,‘t’};
    String s=new String(a);
    等价于String a=new String(“student”);

连接字符串

  • 连接多个字符串:+
    举例:
    public class Join {
    public static void main(String[] args) {
    String s1=new String(“hello”);
    String s2=new String(“world”);
    String s=s1+" "+s2;
    System.out.println(s);
    }
    }
    运行结果:hello world
  • 连接其他数据类型
    举例:
    public class Link {
    public static void main(String[] args) {
    int booktime=4;
    float preactice=2.5f;
    System.out.println(“我每天花费”+booktime+“小时看书,”+preactice+“小时上机练习”);
    }
    }
    运行结果:我每天花费4小时看书,2.5小时上机练习

获取字符串信息

  • 获取字符串长度:str.length();
  • 字符串查找:indexOf()(返回搜索的字符或字符串首次出现的位置)、lastIndexOf()方法(返回搜索的字符或字符串最后一次出现的位置)
    indexOf():没有检索到字符串,方法返回值-1;字符串下标是0~length()-1;
    语法:str.indexOf(substr)
    lastIndexOf()语法:str.lastIndexOf(substr);
    举例:
    package lesson5;

/**

  • Created by admin on 2018/6/6.
    */
    public class Text {
    public static void main(String[] args) {
    String str=" we are students “;
    int size=str.lastIndexOf(”");
    System.out.println(“空字符在字符串str中的索引位置是”+size);
    System.out.println(“字符串str的长度是:”+str.length());
    }
    }
    运行结果:
    空字符在字符串str中的索引位置是17
    字符串str的长度是:17
  • 获取指定索引位置的字符:str.chaAt(index)
    举例:
    public class Text {
    public static void main(String[] args) {
    String str=" we are students ";
    char mychar=str.charAt(6);
    System.out.println(“字符串str中索引位置是6的字符是:”+mychar);
    }
    }
    运行结果:
    字符串str中索引位置是6的字符是:e

字符串操作

(1)获取子字符串:substring()
substring(int beginIndex):从指定的索引位置开始截取直到该字符串结尾的子串
语法:str.substring(int beginIndex)
举例:
public class Text {
public static void main(String[] args) {
String str=" we are students “;
String substr=str.substring(3);
System.out.println(substr);
}
}
运行结果: are students
substring(int beginIndex,int endIndex):从字符串某一索引位置开始截取至某一索引位子结束的子串
语法:substring(int beginIndex,int endIndex)
举例:
public class Text {
public static void main(String[] args) {
String str=” we are students “;
String substr=str.substring(0,3);
System.out.println(substr);
}
}
输出结果: we
(2)去除空格:trim()方法忽略前导空格和尾部空格;
语法:str.trim()
举例:
public class Text {
public static void main(String[] args) {
String str=” we are students “;
System.out.println(“字符串str的长度是:”+str.length());
System.out.println(“去掉空格后的长度”+str.trim().length());
}
}
运行结果:
字符串str的长度是:17
去掉空格后的长度15
(3)字符串替换:replace()方法
语法:str…replace(char oldChar,char newChar)
举例:
public class Text {
public static void main(String[] args) {
String str=” we are students “;
String newstr=str.replace(“w”,“W”);
System.out.println(newstr);
}
}
运行结果: We are students
(4)判断字符串的开始与结尾
startsWith()方法:用户判断当前字符串对象的前缀是否为参数指定的字符串;
语法:str.startsWith(String prefix)
endsWith()方法:判断当前字符串是否为以给定的子字符串结束;
语法:str.endsWith(string suffix)
举例:
public class StartOrEnd {
public static void main(String[] args) {
String num1=“22045612”;
String num2=“21304578”;
boolean b=num1.startsWith(“22”);
boolean b2=num1.endsWith(“78”);
boolean b3=num2.startsWith(“22”);
boolean b4=num2.endsWith(“78”);
System.out.println(“字符串num1是医22开始的吗?”+b);
System.out.println(“字符串num1是医78结束的吗?”+b2);
System.out.println(“字符串num2是医22开始的吗?”+b3);
System.out.println(“字符串num2是医78结束的吗?”+b4);
}
}
运行结果:
字符串num1是医22开始的吗?true
字符串num1是医78结束的吗?false
字符串num2是医22开始的吗?false
字符串num2是医78结束的吗?true
(5)判断字符串是否相等
equals()方法(区分大小写):str.equals(String otherstr)
equalsIgnoreCase()方法(不区分大小写):str.equalsIgnoreCase(String otherstr))
举例:
public class Opinion {
public static void main(String[] args) {
String s1=new String(“abc”);
String s2=new String(“ABC”);
boolean b1=s1.equals(s2);
boolean b2=s1.equalsIgnoreCase(s2);
System.out.println(s1+” equals “+s2+” “+b1);
System.out.println(s1+” equalsIgnoreCase “+” “+b2);
}
}
运行结果:
abc equals ABC false
abc equalsIgnoreCase true
(6)按字典顺序比较两个字符串:compareTo()方法
基于各个字符的Unicode值,String对象位于参数字符串之前,比较结果为负整数;String对象位于参数字符串之后,则比较结果为正整数;如果2个字符串相等,则结果为0;
语法:str.compareTo(String otherstr)
举例:
public class Wordbook {
public static void main(String[] args) {
String s1=new String(“b”);
String s2=new String(“a”);
String s3=new String(“c”);
String s4=new String(“b”);
System.out.println(s1+” compareto “+s2+”:"+s1.compareTo(s2));
System.out.println(s1+" compareto “+s3+”:"+s1.compareTo(s3));
System.out.println(s1+" compareto “+s4+”:"+s1.compareTo(s4));
}
}
运行结果:
b compareto a:1
b compareto c:-1
b compareto b:0
(7)字母大小写转换
toLowerCase()方法:转换为小写
语法:str.toLowerCase()
toUpperCase()方法:转换为大写
语法:str.toUpperCase()
举例:
public class UpAndLower {
public static void main(String[] args) {
String str=new String(“abc DEF”);
String newstr1=str.toLowerCase();
String newstr2=str.toUpperCase();
System.out.println(newstr1);
System.out.println(newstr2);
}
}
运行结果:
abc def
ABC DEF
(8)字符串分割:split()方法
split(String sign):sign为分割字符串的分割符,也可以使用正则表达式;如果想定义多个分割符,使用|符号
语法:str.split(String sign)
split(String sign,int limit):sign分割符、limit限制的分割次数;
语法:str.split(String sign,int limit)
举例:
public class Division {
public static void main(String[] args) {
String str=“192.168.0.1”;
//按照.进行分割,使用转义字符
String[] firstArray=str.split("\.");
//按照.进行二次分割,使用转义字符
String[] secondArray=str.split("\.",2);
String[] thirdArray=str.split("\.",3);
System.out.println(“str的原始值为:”+str);
System.out.print(“全部分割的结果:”);
for (String a:firstArray) {
System.out.print("["+a+"]");
}
System.out.println();
System.out.print(“分割两次的结果:”);
for (String a:secondArray) {
System.out.print("["+a+"]");
}
System.out.println();
System.out.print(“分割三次的结果:”);
for (String a:thirdArray){
System.out.print("["+a+"]");
}
}
}
运行结果:
str的原始值为:192.168.0.1
全部分割的结果:[192][168][0][1]
分割两次的结果:[192][168.0.1]
分割三次的结果:[192][168][0.1]

格式化字符串

  • format(String format,Object…args)
    语法:str.format(String format,Object…args)
    format:格式字符串
    args:格式字符串中由格式说明符引用的参数
  • format(Local l,String format,Object…args)
    l:格式化过程中要用到的语言环境,如果l为null,则不进行本地化;
    (1)日期和时间字符串格式化
  • 日期格式化,常用的日期格式化转换符:
    转换符 说明 示例
    %te 一个月中的某一天(1~31) 2
    %tb 指定语言环境的月份简称 Feb(英文)、二月(中文)
    %tB 指定语言环境的月份全称 February(英文)、二月(中文)
    %tA 指定语言环境的星期几全称 Monday(英文)、星期一(中文)
    %ta 指定语言环境的星期几简称 Mon(英文)、星期一(中文)
    %tc 包括全部日期和时间信息 星期五 十一月 15 17:44:22 CST 2019
    %tY 4位年份 2019
    %tj 一年中的第几天(001~366) 085
    %tm 月份 03
    %td 一月中的第几天(01~31) 02
    %ty 2位年份 08
    举例:
    public class Eval {
    public static void main(String[] args) {
    Date date = new Date();
    String year = String.format("%tY", date);
    String month=String.format("%tB",date);
    String day=String.format("%td",date);
    System.out.println(date);
    System.out.println(“今年是:” + year + “年”);
    System.out.println(“现在是:”+month);
    System.out.println(“今天是:”+day+“号”);
    }
    }
    运行结果:
    Fri Nov 15 17:47:24 CST 2019
    今年是:2019年
    现在是:十一月
    今天是:15号
  • 时间格式化,时间格式化转换符:
    转换符 说明 示例
    %tH 2位数字的24时制的小时(00~23) 14
    %tI 2位数字的12时制的小时(01~12) 05
    %tk 2位数字的24时制的小时(0~23) 5
    %tl 2位数字的12时制的小时(1~12) 10
    %tM 2位数字的分钟(00~59) 05
    %tS 2位数字的秒数(00~60) 12
    %tL 3位数字的毫秒数(000~999) 920
    %tN 9位数字的微秒数(000000000~999999999) 062000000
    %tp 指定语言环境下上午或下午标记 下午(中文)、pm(英文)
    %tz 相对于GMT RFC82格式的数字时区偏移量 +800
    %tZ 时区缩写形式的字符串 CST
    %ts 1970-01-01 00:00:00至现在经过的秒数 1206426646
    %tQ 1970-01-01 00:00:00至现在经过的毫秒数 1206426737543
    举例:
    public class GetDate {
    public static void main(String[] args) {
    Date date=new Date();
    String hour=String.format("%tH",date);
    String minute=String .format("%tM",date);
    String second=String.format("%tS",date);
    System.out.println(“现在是:”+hour+“时”+minute+“分”+second+“秒”);
    }
    }
    运行结果:
    现在是:14时56分08秒
  • 格式化常见的日期时间组合
    转换符 说明 示例
    %tF “年-月-日"格式(4位年份) 2019-11-18
    %tD “月/日/年"格式(2位年份) 18/11/19
    %tc 全部日期和时间信息 星期一 十一月 18 15:15:30 CST 2019
    %tr “时:分:秒 PM(AM)“格式(12小时) 15:15:30 下午
    %tT “时:分:秒 “格式(24小时) 15:15:30
    %tR “时:分"格式(24小时) 15:15
    举例:
    public class GetDate {
    public static void main(String[] args) {
    Date date=new Date();
    String time=String.format(”%tc”,date);
    String form=String.format(”%tF”,date);
    System.out.println(“全部的时间信息是:”+time);
    System.out.println(“年-月-日格式:”+form);
    }
    }
    运行结果:
    全部的时间信息是:星期一 十一月 18 15:21:55 CST 2019
    年-月-日格式:2019-11-18
    (2)常规类型格式化
    转换符 说明 示例
    %b,%B 结果被格式化为布尔类型 true
    %h,%H 格式化为散列码 A05A5198
    %s,%S 结果被格式化为字符串类型 “adcd”
    %c,%C 结果被格式化为字符类型 ‘a’
    %d 结果被格式化为十进制整数 40
    %o 结果被格式化为八进制整数 11
    %x,%X 结果被格式化为十六进制正式 4b1
    %e 结果被格式化为用计算机科学计数法表示的十进制数 1.70000e+01
    %a 结果被格式化为带有效位数和指数的十六进制浮点值 0X1.C000000000001P4
    %n 结果为特定于平台的行分隔符
    %% 结果为字面值‘%’
    举例:
    public class General {
    public static void main(String[] args) {
    String str=String.format(”%d”,400/2);
    String str2=String.format(”%b",3>5);
    String str3=String.format("%x",200);
    System.out.println(“400的一半是:”+str);
    System.out.println(“3>5正确吗?”+str2);
    System.out.println(“200的十六进制数是:”+str3);
    }
    }
    运行结果:
    400的一半是:200
    3>5正确吗?false
    200的十六进制数是:c8

使用正则表达式

元字符 正则表达式中的写法 意义
. . 代表任意一个字符
\d \d 代表0-9的任何一个数字
\D \D 代表任何一个非数字字符
\s \s 代表空白字符,如\t、\n
\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{Digit} \p{Digit} 十进制数字,即0-9
\p{Alnum} \p{Alnum} 数字或字母字符
\p{Punct} \p{Punct} 标点符号:!"#$%&’()*+,-./:;<=>?@[]^_{|}~
\p{Graph} \p{Graph} 可见字符:[\p{Alnum}\p{Punct}]
\p{Print} \p{Print} 可见字符:[\p{Graph}\x20]
\p{Blank} \p{Blank} 空格或制表符:\t
\p{Cntrl} \p{Cntrl} 控制字符:[\x00-\x1F\x7F]
举例:
[^456]:代表4、5、6之外的任何字符;
[a-r]:代表a-r中的任何一个字母;
[a-zA-Z]:可表示任意一个英文字母;
[a-e[g-z]]:代表ae,或者gz中的任何一个字母(并运算);
[a-o&&[def]]:代表字母d、e、f(交运算);
[a-d&&[^bc]]:代表字母a、d(差运算);
限定修饰符:
限定修饰符 意义 示例
? 0次或1次 A?

  • 0次或多次 A*
  • 一次或多次 A+
    {n} 正好出现n次 A{2}
    {n,} 至少出现n次 A{3,}
    {n,m} 出现n~m次 A{2,6}
    举例:邮箱校验String regex="\w+@\w+(\.\w{2,3})\.\w{2,3}"
    public class Judge {
    public static void main(String[] args) {
    String regex="\w+@\w+(\.\w{2,3})
    \.\w{2,3}";
    String str1=“aaa@”;
    String str2=“aaaaa”;
    String str3=“1111@111ffyu.dfg.com”;
    if (str1.matches(regex)) {
    System.out.println(str1+“是一个合法的email地址格式”);
    }
    if (str2.matches(regex)){
    System.out.println(str2+“是一个合法的email地址格式”);
    }
    if (str3.matches(regex)){
    System.out.println(str3+“是一个合法的email地址格式”);
    }
    }
    }
    运行结果:
    1111@111ffyu.dfg.com是一个合法的email地址格式

字符串生成器

举例:
public class Jerque {
public static void main(String[] args) {
String str="";
long starTime=System.currentTimeMillis();
for (int i=0;i<10000;i++){
str=str+i;
}
long endTime=System.currentTimeMillis();
long time=endTime-starTime;
System.out.println(“string消耗时间:”+time);
StringBuilder builder=new StringBuilder();
starTime=System.currentTimeMillis();
for (int j=0;j<10000;j++){
builder.append(j);
}
endTime=System.currentTimeMillis();
time=endTime-starTime;
System.out.println(“stringbuilder消耗的时间:”+time);
}
}
运行结果:
string消耗时间:1073
stringbuilder消耗的时间:1
append()方法:该方法用户向字符串生成器中追加内容;
语法:append(content);
insert(int offset,arg)方法:用于向字符串生成器中的指定位置插入数据内容;
语法:insert(int offset,arg)
delete(int start,int end)方法:移除此序列的子字符串中的字符
语法:delete(int start,int end)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值