首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Java字符串

Java字符串

作者头像
用户7886150
修改2021-02-02 11:41:25
修改2021-02-02 11:41:25
9440
举报
文章被收录于专栏:bit哲学院bit哲学院

参考链接: Java字符串

字符串的创建 

1.直接创建 

String s="hello world";

2.使用new进行创建 

String s1=new String();//此时s1为""而不是null

String s2=new String("hello world");

char[] a={'h','e','l','l','o'};

String s3=new String(a);//后续对字符数组的修改不会影响字符串

String s4=new String(a,2,3);//第二个参数是开始位置,第三个参数是长度,s4为llo

3.通过StringBuilder和StringBuffer的toString()方法。(下面会介绍) 

连接字符串 

1.使用+来连接字符串 

2.使用concat()方法 

String a="";

a=a.concat("b).concat("cd);

3.使用StringBuilder和StringBuffer的append()方法。 

字符串基本操作 

1.基本操作方法 

A.获取字符串长度方法length() 

int length=str.length();

B.获取字符串中第i个字符方法charAt() 

char ch=str.charAt(i);

C.获取指定位置的字符方法getChars(4个参数) 

char array[]=new char[100];

str.getChars(indexBegin,indexEnd,array,arrayBegin);

indexBegin – 字符串中要复制的第一个字符的索引 

indexEnd – 字符串中要复制的最后一个字符之后的索引 

array – 目标数组 

arrayBegin – 目标数组中的起始偏移量 

注意:截取区间为[indexBegin,indexEnd) 

D.判断字符串是否有内容 

boolean flag=str.isEmpty();

E.字符数组和字符串的转换 

char[] ch=str.toCharArray();

String s=String.valueOf(ch);

F.割裂字符串 

String[] result=str.split(" ");

参数可以是一个正则表达式。 

G.获得子串 

String sub1=str.substring(begin);

String sub2=str.substring(begin,end);

sub1包含了[begin,str.length),sub2包含了[begin,end) 

H.转大小写 

String big=str.toUpperCase();

String small=str.toLowerCase();

2.字符串比较 

A.比较大小 

int a=s1.compareTo(s2);

int b=s1.compareToIgnoreCase(s2);

这两个方法会返回一个int值,只可能是0,1,或者-1. 

如果字符串等于参数字符串,返回0;小于参数字符串,返回-1;大于参数字符串,返回1. 

B.比较相等 

boolean a=s1.equals(s2);

boolean b=s1.equalsIgnoreCase(s2);

注意:equals用来比较内容是否相同,而==用来比较对象是否相同。 

String a="abc";

String b="abc";

此时a==b返回true,因为它们指向常量池中同一个对象。 

String a=new String("abc");

String b=new String("abc");

此时a==b返回false,因为a和b是两个不同的对象。 

C.比较前缀和后缀 

boolean a=s1.startsWith(prefix);

boolean b=s2.endsWith(suffix);

3.字符串的查找 

A.indexOf()方法,没有找到会返回-1 

str.indexOf(ch);//查找字符,返回首次出现的索引

str.indexOf(ch,fromIndex);//包含fromIndex

str.indexOf(s);//查找字符串

str.indexOf(s,fromIndex);

B.lastIndexOf()方法 

和indexOf()用法一致,返回值为最后一次出现的索引. 

C.判断是否包含字符串 

boolean flag=str.contains(s);

D.字符和字符串的替换 

str=str.replace('a','b');

str=str.replace("aa","bb");

字符串的类型转换 

数据类型字符串→其他类型其他类型→字符串1其他类型→字符串2byteByte.parseByte(str)String.valueOf(bt)Byte.toString(bt)intInteger.parseInt(str)String.valueOf(i)Integer.toString(i)longLong.parseLong(str)String.valueOf(l)Long.toString(l)doubleDouble.parseDouble(str)String.valueOf(d)Double.toString(d)floatFloat.parseFloat(str)String.valueOf(f)Float.toString(f)charstr.charAt()String.valueOf©Character.toString( c )booleanBoolean.getBoolean(str)String.valueOf(b)Boolean.toString(b)

StringBuilder和StringBuffer 

StringBuilder和StringBuffer对象都代表一个字符序列可变的字符串,当一个对象被创建后,可以调用append(),insert(),reverse(),setCharAt(),setLength()等方法改变这个字符序列。一旦生成了想要的字符串,可以调用toString()方法来转换成String对象。两者的速度会比直接对String操作快得多。 

StringBuffer b=new StringBuffer("123");//123

b.append("456");//123456

b.insert(2,"7");//1273456

b.reverse();//6543721

b.setCharAt(0,'A');//A543721

b.setLength(4);//A543

System.out.print(b.toString);

两者几乎完全相同,唯一不同的地方在于,StringBuffer是线程安全的,而StringBuilder没有实现线程安全功能,因此运行速度会快一些。StringBuffer类中的方法都添加了synchronized关键字,用来保证线程的安全。 

String的不可变性 

1.不可变对象,指创建后的对象不可以改变,典型例子为Java中的String。 2.String类不可变的好处: A.可以实现字符串池。字符串池的实现可以在运行时节约很多时间,因为不同的字符串变量都指向池中同一个字符串。 B.安全性得到保证。譬如数据库的用户名、密码等都是用字符串来传入;Socket编程中,主机名和端口都是字符串传入。字符串的不可变性防止黑客的修改。 C.对于多线程是安全的。 D.类加载器要用到字符串,不可变性提供了安全性,保证正确的类被加载,防止对数据库的损坏。 E.字符串不可变,因此它创建时的hash值可以被缓存,不需要重新计算。字符串很适合做Map中的键,处理速度要快过其他键对象。 

格式字符串 

String类的format()方法使用指定的格式字符串和参数返回一个格式化字符串。 

转换符说明示例%b,%B格式化为布尔类型false%h,%H格式化为哈希码A05A5198%s,%S格式化为字符串类型“abc”%c,%C格式化为字符类型‘w’%d格式化为十进制数26%0格式化为八进制数12%x,%X格式化为十六进制数4b1%e格式化为科学计数法的十进制数1.700000e+01%a格式化为带有效位数和指数的十六进制浮点数0X1.C000000000001P4

String str=String.format("%d",400/2);

String str2=String.format("%b",3>5);

转换符说明示例%te一个月中的一天(1~31)12%td一个月中的一天(01~31)07%tb指定语言的月份简称Jan(英文)、一月(中文)%tB指定语言的月份全称February(英文)、二月(中文)%ta指定语言的星期几简称Mon(英文)、星期一(中文)%tA指定语言的星期几全称Monday(英文)、星期一(中文)%tc全部日期和时间信息星期三十月25 13:37:22 CST 2008%ty两位年份08%tY四位年份2008%tj一年中的第几天(001~366)060%tm月份05

Date date=new Date();

Locale form=Locale.US;

String year=String.format(form,"%tY",date);

String month=String.format(form,"%tB",date);

String day=String.format(form,"%td",date);

使用char而不是String来存储密码 

1.由于字符串是不可变的,如果将密码保存为纯文本,它将在内存中可用,直到垃圾收集器清除它。而且它很有可能存储在字符串池中,会保留很长时间,从而构成安全威胁。 2.如果使用String,总是存在日志文件或控制台打印纯文本的风险,但如果使用array,则不会打印数组的内容而是打印其内存位置。 3.Java本身建议使用JPasswordField类的getPassword()方法,该方法返回一个Char[]和不推荐使用的getText()方法,该方法以明文形式返回密码。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档