JAVA string 类

来源:互联网 发布:知乎 投资 复利 编辑:程序博客网 时间:2024/04/20 04:24
package org.stringdemo;public class StringDemo01 {public static void main(String args[]){String s1 = "hello";String s2 = new String("hello");String s3 = s2;System.out.println(s1 == s2);System.out.println(s1 == s3);System.out.println(s2 == s3);System.out.println(s1.equals(s2));System.out.println(s1.equals(s3));System.out.println(s2.equals(s3));}}

equals 比较实际值

== 比较引用地址


一个字符串实际上就是String 的匿名对象


String 的两种实例化方式的区别:


可以发现,程序开辟了两个空间,与直接赋值相比,肯定使用直接赋值的方式方便,所以在开发中绝对不能使用关键字new 调用String 类的 String(String org)的构造方法

而且,如果使用直接赋值的方式也可以减少堆内存的开销


package org.stringdemo;public class StringDemo01 {public static void main(String args[]){String s1 = "hello";String s2 = "hello";String s3 = "hello";System.out.println(s1 == s2);System.out.println(s1 == s3);System.out.println(s2 == s3);System.out.println(s1.equals(s2));System.out.println(s1.equals(s3));System.out.println(s2.equals(s3));}}

实际上,以上的三个对象表示的都是同一个空间的引用,因为对于String 来讲使用直接赋值的方式会在字符串池中保存内容。

如果之后再声明字符串的时候发现内容一样了,则不会重新开辟空间,而是从内存汉书中取出数据继续使用。


字符串的内容一旦申明之后就不能修改


package org.stringdemo;public class StringDemo01 {public static void main(String args[]){String str="hello";str += " world";System.out.println(str);}}


字符串变量的改变改变的是内存空间的地址指向,而本身的字符串内容没有任何的变化。

所以,在开发中以下的操作代码需要避免


package org.stringdemo;public class StringDemo01 {public static void main(String args[]){String str = "hello";for (int i=0;i<100;i++){str += i;}System.out.print(str);}}

以上操作代码要不断的断开已有连接,指向新连接100次


String 的常用操作方法

根据字符串中的索引找到指定位置的字符:public char charAt(int index)

将字符串变为字符数组:public char[] toChartArray()

将字符数据变为字符串:public String(char[] value) (将全部的字符数组变为String 类型)

                                            public String(char[],int offset,int count) 将部分的字符数组变为String 类型


字节与字符串

与字符数组的操作一致,一个字符串也可以变为字节数组,一个字节数据也可以变为字符串:

String --> 字节数组: public byte[] getBytes()

字节数组 --> String: public String(byte[] bytes)

                                       public String(byte[] bytes,int offset,int length)


package org.stringdemo;public class StringDemo01 {public static void main(String args[]){String str = "hello";System.out.println(str.charAt(1));char[] c_str = str.toCharArray();byte[] b_str = str.getBytes();for (int i=0;i<c_str.length;i++){System.out.print(c_str[i]+"、");}System.out.println();for (int i=0;i<b_str.length;i++){System.out.print(b_str[i]+"、");}System.out.println();String str1 = new String(c_str,2,3);String str2 = new String(c_str,1,2);System.out.println(str1);System.out.println(str2);String str3 = new String(b_str,2,3);String str4 = new String(b_str,1,2);System.out.println(str3);System.out.println(str4);}}


判断是否以指定的字符串开头或结尾

判断是否以指定的字符串开头:public boolean startsWith(String prefix)

判断是否以指定的字符串结尾:public boolean endsWith(String prefix)


package org.stringdemo;public class stringdemo02 {public static void main(String args[]){String str = "**hello world##";System.out.println(str.startsWith("**"));System.out.println(str.endsWith("##"));}}



替换操作

使用以下的方法可以完成替换的操作:public String replaceAll(String regex,String replacement)


package org.stringdemo;public class StringDemo03 {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubString str ="Hello Wrold";System.out.println(str.replaceAll("l","x"));}}


字符串截取

使用以下两个方法可以完成字符串的截取操作:

全部截取: public String substring(int beginIndex)

部份截取: public String substring(int beginIndex,int endIndex)


package org.stringdemo;public class StringDemo04 {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubString str = "Hello World";System.out.println(str.substring(6));System.out.println(str.substring(0,6));}}


字符串拆分

可以将字符串按指定内容进行拆分操作

public String[] split(String regex)


package org.stringdemo;public class StringDemo05 {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubString str = "Test ABC END";String st[] = str.split(" ");for(String s:st){System.out.println(s);}}}

字符串查找

如果需要在一个字符串查找是否存在指定的内容,可以使用以下的两个方法;

1. 取得指定字符串的位置:public int indexOf(String str)

                                                public int indexOf(String str,int fromIndex)

此方法返回int 型数据,如果查找到了则返回位置,查找不到,返回-1

2. 直接查找:public boolean contains(String s)



package org.stringdemo;public class StringDemo06 {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubString str = "Hello World";System.out.println(str.contains("Hello"));System.out.println(str.contains("Hello1"));System.out.println(str.indexOf("World"));System.out.println(str.indexOf("World1"));System.out.println(str.indexOf("l",6));}}


字符串的其他操作

去掉左右空格:public String trim()

取得字符串长度:public int length()

转大写:public String toUpperCase()

转小写:public String toLowerCase()


package org.stringdemo;public class StringDemo06 {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubString str = " Hello World ";System.out.println(str.trim());System.out.println(str.toUpperCase());System.out.println(str.toLowerCase());System.out.println(str.length());}}


TOM:89|JERRY:90|TONY:89

TOM --> 89

JERRY --> 90

TONY --> 89


package org.stringdemo;public class StringDemo06 {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubString str = "Tom:89|JERRY:90|TONY:78";String str1[] = str.split("\\|");for (int i=0;i<str1.length;i++){// System.out.println(str1[i].replaceAll(":","-->"));String str2[] = str1[i].split(":");System.out.println(str2[0]+"-->"+str2[1]);}}}


查询EMAIL 存在@ 和.


package org.stringdemo;public class StringDemo07 {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubString email = "www@.163com";System.out.println(validate(email));}public static boolean validate(String str){boolean flag = true;if ((str.indexOf("@") == -1) || (str.indexOf(".") == -1)){flag = false;}if (str.indexOf("@") > str.indexOf(".")){flag = false;}return flag;}}


原创粉丝点击