java字符串

字符串是由字符构成的序列,很多语言把字符串当作字符数组处理,但在java中,字符串是一个对象。

字符串构造

  • 用字符串直接量创建字符串对象。java将字符串直接量看作String对象
String newString = new String("hi world");

String newString = "hi world";
  • 用字符数组创建字符串对象
    char[] charArray={'h','i',' ','w','o','r','l','d'}
    String newString=new String(charArray); 

String变量存储的是对String对象的引用,String对象存储的才是字符串的值,但通常不做严格区分,均叫做字符串。

不可变字符串和限定字符串

String对象是不可变的,它的内容是不能改变的。

String s="java";
s="world";

以上语句,创建内容为“java”的String对象,并把对象引用赋值给s,第二条语句创建内容为“world”的String对象,并把对象引用赋值给s。此时,有两个对象,s指向内容为world的对象,内容为java的对象不能再访问。

java虚拟机为了提高效率并节约内存,对具有相同字符串序列的字符串直接量使用同同一个实例。这样的实例称为限定的。

String s1="welcome";
String s2=new String("welcome");
String s3="welcome";

s1和s3指向相同的String对象,s2与其他两个只具有相同的内容,但是是不同的字符串对象。s1==s3 ,s1!=s2

字符串比较

运算符==用于检测两个String对象引用是否指向同一个对象:指向同一个对象返回true,否则false。
equals(s)方法用于判断两个字符串变量的内容是否相同。
s1.compareTo(s2)方法,
如果s1与s2相等,则返回0;如果按字典序s1 < s2,返回值小于0;如果大于,返回值大于0。返回的实际值是依据s1与s2从左到右数第一个不同字符之间的距离得出的。
例如:s1=“asd”,s2=“asf”,一个字符相等,检查第二个字符也相等,检查第三个字符d比f小2,所以返回-2。

  • 使用>、>=等运算符比较两个字符串会发生语法错误,可用s1.compareTo(s2)进行比较
  • cmpareTo根据一个字符串是否等于、大于或小于另一个字符串分别返回0、正整数或负整数。
  • 如果两个字符串相等,equals方法返回true,如果不等,返回false。
  • startWith(prefix)方法,如果以指定前缀开始则返回true

字符串连接

  • 使用concat方法
String s3=s1.concat(s2);
  • 使用“+”
String s3=s1+s2;

使用+可以连接数字和字符串和字符串直接量。连接数字时,先将数字转换为字符串,再进行连接。

获取字符串

  • charAt()获取指定下标处的单个字符
s.charAt(1);
  • substring从字符串中提取子串
substring(beginIndex):返回从指定下标开始,到字符串末尾的子串
substring(beIn,enIn):返回从指定下标开始到指定下标结束的子串(不包括结束下标处的字符)

例如:

String s="welcome to java".substring(0,11)+"c++";

s变为“welcome to c++”

字符串的转换、替换和分隔

一旦创建了字符串内容就不能改变,replace、split等方法会返回一个源自原始字符串的新字符串,原始字符串并未被改变。

replace(oldChar,newChar)//返回用新字符替换字符串中和旧字符匹配的新的字符串
replaceFirst(oldString,newString);
//返回用新子串替换第一个和旧子串匹配的子串之后的新字符串
replaceAll(oldString ,newString)//返回用新子串替换所有和旧子串匹配的子串之后的新字符串、
split(delimiter);
//返回用定界符分隔的子串所构成的一个字符串数组

例如:

String[] r="java#c++#python".split("#");//#分隔字符串,然后存入字符串数组
for(int i=0;i<r.length;i++)
    System.out.print(r[i]+"\t");

返回结果:java c++ python

依照模式的匹配、替换和分隔

正则表达式:根据某个指定模式来匹配、替换和分隔一个字符串
match()、replace()、split()等方法都可以根据构建的模式结合使用,内容较多,日后单独写一篇

字符串与数组的转换

  • 字符串-> 数组

使用toCharArray():

char[] c="java".toCharArray();

使用getChars():

getChars(int srcBegin,int srcEnd,char[] dst,int dstBegin);
//将下标从secBegin到srcEnd-1的子串复制到字符数组dst中下标从dstBegin开始的位置

char[] dst={'j','a','v','a','1','2','3','4'};
"py5678".getChars(2,6,dst,4);

运行结果:dst变成{‘j’,’a’,’v’,’a’,’5’,’6’,’7’,’8’}

  • 字符数组-> 字符串

使用构造方法String(char[])

String s=new String(new char[] {'j','a','v','a'});

使用valueOf(char [])

String s=String.valueOf(new char[] {'j','a','v','a'});

格式化字符串

String类包含一个静态format方法,可以创建一个格式化的字符串,调用语法:

String.format(format,item1,item2,...,itemk);

类似格式化输出的printf,但是printf()只是显示一个格式化的字符串,format是返回一个格式化的字符串。

String s=String.format(“%5.2f”,45.556);

创建一个格式化的字符串“45.56”

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值