ava基础_String
来源:互联网 发布:51单片机驱动风扇 编辑:程序博客网 时间:2024/05/29 06:36
String类
基本方法:
1. 获取:
1.1 获取字符串中字符的个数(长度).
int length();
1.2 根据位置获取字符。
char charAt(int index);
1.3 根据字符获取在字符串中的第一次出现的位置.
int indexOf(int ch)
int indexOf(int ch,int fromIndex):从指定位置进行ch的查找第一次出现位置
int indexOf(String str);
int indexOf(String str,intfromIndex);
返回指定子字符串在此字符串中最右边出现处的索引。
int lastIndexOf(int ch)
int lastIndexOf(int ch,intfromIndex):从指定位置进行ch的查找字符串在此字符串中最右边出现处的索引。
int lastIndexOf(String str);
int lastIndexOf(String str,intfromIndex);
1.4 获取字符串中一部分字符串。也叫子串.
String substring(int beginIndex, intendIndex)//包含begin 不包含end 。
String substring(int beginIndex);
2. 转换:
2.1 将字符串变成字符串数组(字符串的切割)
String[] split(String regex)://涉及到正则表达式.
2.2 将字符串变成字符数组。
char[] toCharArray();
2.3 将字符串变成字节数组。
byte[] getBytes();
2.4 将字符串中的字母转成大小写。
String toUpperCase():大写
String toLowerCase():小写
2.5 将字符串中的内容进行替换
String replace(char oldch,char newch);
String replace(Strings1,String s2);
replace方法是在原字符串的基础上,返回一个新的字符串,原字符串不变。
public static void method_replace(){String s = "hello java";//String s1 = s.replace('a','n');String s1 = s.replace("java","world"); //return hello worldsop("s="+s);//还是 hello javasop("s1="+s1);//hello world}
2.6 将字符串两端的空格去除。
String trim();
3. 判断
3.1 两个字符串内容是否相同啊?
boolean equals(Object obj);
boolean equalsIgnoreCase(string str);//忽略大写比较字符串内容。
3.2 字符串中是否包含指定字符串?
boolean contains(string str);
3.3 字符串是否以指定字符串开头。是否以指定字符串结尾。
boolean startsWith(string);
boolean endsWith(string);
4. 比较。
4.1 比较大小
int compareTo(String anotherString)
StringBuffer类
StirngBuffer就是字符串缓冲区,用于存储数据的容器,增删改查 C (craet) U (updata) R (read) D (delete)1,特点
1.1而且长度是可变化的。
1.2可以直接操作多个数据类型。
1.3最终会通过toString方法变成字符串。1.4可以对字符串进行修改2. 功能
增删改查 C(create)U(update)R(read)D(delete)
2.1添加:
StringBuffer append(data);
StringBuffer insert(index,data);
2.2删除:
StringBuffer delete(start,end):包含头,不包含尾。
StringBuffer deleteCharAt(int index):删除指定位置的元素
2.3查找:
char charAt(index);
int indexOf(string);
int lastIndexOf(string);
2.4修改:
StringBuffer replace(start,end,string);
void setCharAt(index,char);
StringBuilder类
JDK1.5 版本之后出现了StringBuilder.
StringBuffer是线程同步。如果是单线程,StringBuffer效率比较低
StringBuilder是线程不同步。
JVM对字符串的处理
String java = new String("java");,1,String对象实例化
常见的问题是:上面语句创建了几个字符串对象?上面语句实际上创建了2个字符串对象,一个是“java”这个直接量对应的字符串对象,一个是由new String()构造器返回的字符串对象。
对于java成程序中的字符直接量,JVM会使用一个常量池(是在编译期被确定,并被保存在已编译的.class文件中的一些数据。它包括了关于类、方法、接口等中的常量,也包括字符串常量。)来保存它们,当第一次使用
字符串直接量时(在编译时期能直接确定),JVM会将它放入常量池缓存。在一般情况下,常量池中字符串对象不会被垃圾回收,当程序再次需要使用该字符串时,直接让引用变量指定常量池的字符串。
示例:1,str1,str2两个字符串变量的值都是直接量,他们都指向常量池的“hello java”字符串,所以身str1和str2相等。class StringTest {public static void main(String[] args) {String str0 = "java";//str1的值是字符串直接量String str1 = "hello java";//str2的值也指向常量池的“hello java”字符串String str2 = "hello java";System.out.println(str1 == str2);//true//str3的值可以在编译时确定,所以str3也会直接引用常量池的“hello java”字符串String str3 = "hello "+"java";System.out.println(srt1 == str3);//true//因为str4的值包含了变量,因此不能在编译时确定String str4 = "hello "+str0;System.out.println(str1 == str4);//false}}
2,str3的值是一个字符串连接表达式,但由于这个字符串连接表达式的值可以在编译时期确定,所以JVM在编译时计算str3的值,
并让str3指向常量池的“hello java”字符串。所以身str1和str3相等。
3,str4也是字符串连接表达式,但是由于这个字符串连接表达式中包含了一个变量,因此str4不会指向常量池的“hello java”字符串。因此石str1 == str4 为false。
(如果程序使用了变量,调用了方法,那就只能等运行时才可确定该字符串连接表达式的值,因此无法利用JVM的常量池)。2,创建了几个对象
String str = "hello"+"java"+"100";问题:上面语句创建了几个对象,
其实这段代码只创建了一个字符串对象,因为str的值可以在编译时确定下来,JVM会在编译时就计算出str的值。
3,关于equals()和==:
这个equals()对于String简单来说就是比较两字符串的Unicode序列是否相当,如果相等返回true;而==是比较两字符串的地址是否相同,也就是是否是同一个字符串的引用。4,不可变的字符串
String使用private final char value[]来实现字符串的存储,也就是说String对象创建之后,就不能再修改此对象中存储的字符串内容。class StringTest {public static void main(String[] args) {String str = "hello ";System.out.pritnln(str);//hello<span style="white-space:pre"></span>str = str+"java";System.out.pritnln(str);//hello java}}1,可以看到上面两次输出str不一样。看起来好像str对应的字符串该变了,但是要记住,str只是一个引用类型变量,它并不是真正的String对象,它只是指向String对象而已,也就是说,发生改变的不是String对象,而是str变量本身,它指向了一个新的String对象。
2,当str指向新的String对象后,原来的String对象没有变量指向它,也许以后永远都不会再被利用,但是这个字符串不会被垃圾回收,因为它一直存在于常量池中——这就是java内存泄露的原因之一。
5. String和StringBuffer的区别
某些特别情况下, String 对象的字符串拼接其实是被 JVM 解释成了 StringBuffer 对象的拼接,所以这些时候 String 对象的速度并不会比 StringBuffer 对象慢,如在以下的字符串对象生成中,String 效率是远要比 StringBuffer 快的:
String S1 = “This is only a” + “ simple” + “ test”;你会很惊讶的发现,生成 String S1 对象的速度简直太快了,而这个时候 StringBuffer 居然速度上根本一点都不占优势。其实这是 JVM 的一个把戏,在 JVM 眼里,这个
StringBuffer Sb = new StringBuilder(“This is only a”).append(“ simple”).append(“ test”);
String S1 = “This is only a” + “ simple” + “test”; 其实就是: String S1 = “This is only a simple test”; 所以当然不需要太多的时间了。
但大家这里要注意的是,如果你的字符串是来自另外的 String 对象的话,速度就没那么快了。譬如: String S2 = “This is only a”; String S3 = “ simple”; String S4 = “ test”; String S1 = S2 +S3 + S4; 这时候 JVM 会规规矩矩的按照原来的方式去做。
- ava基础_String
- C#基础点滴_String
- ava基础总结
- ava基础---File类
- 七.Java基础_String类
- 01_Java基础_String&StringBuffer
- Swift2-0基础_String(字符串)
- java基础11_String类
- 转帖:ava语言基础:多线程
- ava基础加强_泛型
- ava基础_正则表达式
- 黑马程序员_Java基础_String类
- Java基础_常用类_String
- 黑马程序员_JAVA基础5_String
- 黑马程序员_Java基础_String类
- 黑马程序员—java基础_String类
- JavaSE_基础库类_String类
- AVA基础之反射(上)
- KVC简单介绍
- android之隐示意图--在一个 <intent-filter>意图中用两个category启动这个activity
- 【BZOJ】【P3781】【小B的询问】【莫队】【400T留念】
- poj3905 pascal题解
- security ebooks
- ava基础_String
- Codeforces Round #279 (Div. 2)C. Hacking Cypher
- nodejs使用C/C++三方库修改步骤
- typedef struct 用法详解和用法小结
- JAVA中的内部类
- QT实现无边框拖动界面
- zynq中纯PL编程
- Intersection of Two Linked Lists,Search a 2D Matrix,Set Matrix Zeroes,Combinations,Spiral Matrix
- 网站如何快速拥有排名