JAVA中的String对象
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA中的String对象相关的知识,希望对你有一定的参考价值。
String 对象的特点
String对象的数据不可改变!
String类型对象封装了一个字符串数组
任何的操作也不能改变这个字符数组的内容
String s = "123"; String ss = s; s = s+"abc"; System.out.println(s);//123abc System.out.println(ss);//123
说明: 在如上代码中改变的是字符串引用变量,但是字符串没有变!好处是字符串可以“作为”基本类型使用!
原理:
字符串常量的重用现象
Java中的字符串常量是尽肯能重复使用的!好处是节省资源(内存)
字符串字面量(直接量)在内容一样时候重用同一个String对象。 String s1 = "123abc"; String s2 = "123abc"; //s1 s2 是字符串类型的引用变量 //"123abc" 是直接量(字面量)
字符串常量也参与重用!
字面量、常量的运算结果是字符串,也重用同一个字符串 String s4 = "123abc"; String s5 = 123 + "abc";//1+"23abc" System.out.println(s4==s5);//true
字符串变量,变量的运算结果 和 新创建的字符串对象不参与重用!! String name = in.nextLine();//Tom String s1 = "Tom and Jerry"; String s2 = name + " and Jerry"; System.out.println(s1==s2);//false String s3 = new String("Tom and Jerry"); System.out.println(s3==s1);//false
原理:
经典题目:
String s1 = "1"+"23"+"abc"; String s2 = "1"+23+"abc"; String s3 = '1'+23+"abc"; System.out.print(s1==s2); System.out.print(s1==s3); 如上代码的执行结果: A.truetrue B.truefalse C.falsetrue D.falsefalse
字符串中的字符
字符串中封装了一个字符数组,字符串中的字符就是char类型的数据。
char 类型是整数, 是一个字符的Unicode编码。
16位无符号整数, 占用2个字节
案例:
String s = "Tom and Jerry"; // 0123456789012 char c = s.charAt(4); System.out.println(c);//a System.out.println((int)c);//97
indexOf 方法
找出一个字符在字符串中的位置:
indexOf() 1. 如果有重复,找出左侧第一个位置 2. 如果没有找到,返回-1
案例:
String s = "Tom and Jerry"; int i = s.indexOf('a'); System.out.println(i);//4 i = s.indexOf('r'); System.out.println(i);//10 i = s.indexOf('X'); System.out.println(i);//-1
str.indexOf("查找字符串", 起始位置)
String url = "http://tedu.cn/index.html"; int i = url.indexOf("/",7); System.out.println(i);
lastIndexOf
反序查找:从右到左查找,返回字符的位置
String url = "http://tedu.cn/index.html"; int i = url.lastIndexOf("/");//14 System.out.println(i);//14
找到包 java.lang
找到类 String
找到方法 lastIndexOf()
substring 方法
从字符串中截取一部分作为子字符串
url.substring(起始位置) //从起始位置开始到最后截取为子字符串 String url = "http://tedu.cn/index.html"; String filename = url.substring(15); // filename = index.html url.substring(起始位置, 结束位置) //从起始位置开始到结束位置截取为子字符串 String url = "http://tedu.cn/index.html"; // 01234567890123456 // 包括起始不包括结束位置 String str = url.substring(7, 14); String str = url.substring(7, 7+8);
trim
String str = " \t Tom \n \r"; String s = str.trim();
startsWith endsWith
检测一个字符串是否以指定字符串开头或结尾
String str = "Hello World!"; boolean b = str.startsWith("Hello");//true b = str.startsWith("World");//false b = str.endsWith("World");//false b = str.endsWith("!");//true
案例:
String name = "demo.JPG"; if(name.toLowerCase().endsWith(".jpg")){ System.out.println("图片文件"); }
StringBuilder
Java 提供的用于计算字符串的API, 其运算性能好:
案例:
String s = "A"; s = s + "1"; s = s + "1"; s = s + "1"; System.out.println(s);
原理:
性能比较:
String s = "A"; long t1 = System.currentTimeMillis(); for(int i=0; i<10000; i++){ s = s+"1"; } long t2 = System.currentTimeMillis(); System.out.println(s.length()); System.out.println(t2-t1); StringBuilder ss = new StringBuilder("A"); t1=System.nanoTime(); for(int i=0; i<10000; i++){ ss.append("1"); } t2 = System.nanoTime(); System.out.println(ss.length()); System.out.println(t2-t1);
以上是关于JAVA中的String对象的主要内容,如果未能解决你的问题,请参考以下文章
java.lang.NullPointerException: Attempt to invoke virtual method ‘int android.database.sqlite异常(代码片段