---------------------- android培训、java培训、期待与您交流! ----------------------
字符串String:
String s = “abc”;s 是一个类类型变量,”abc”是一个对象;
字符串最大特点:一旦被初始化就不可以被改变,是一个常量;
class StringDemo{
public static void main(String[] args) {
String s1 = "abc";
String s2 = newString("abc");
System.out.println(s1 == s2); //false
System.out.println(s1.equals(s2)); //true
//Stirng类复写了Object类中equals方法,重写后用于判断字符串是否相同;
}
}
S1 和s2有什么区别?
S1在内存中有一个对象,
S2有2个对象,一个是通过new创建的,存在于堆内存中,另一个是”abc”存在于字符串缓冲区中;
String 类适用于描述字符串事物,那么它就提供了多个方法对字符串进行操作
常见的操作:
***1,获取. String str = "abcdef";
1.1 字符串中的包含的字符数,也就是字符串的长度
int length(); 获取长度
System.out.println(str.length());
1.2 根据位置获取位置上某个字符
char charAt(int index)
System.out.println(str.charAt(2));
1.3根据字符获取该字符在字符串中位置:
Int indexOf(int ch) 返回的是ch在字符串中第一次出现的位置
System.out.println(str.indexOf('a'));
Int indexOf(int ch,int fromIndex) : 从fromIndex指定位置开始,获取ch在字符串中出现的位置
int indexOf(String str): 返回的是str在字符串中第一次出现的位置 System.out.println(str.indexOf('c',2));
int indexOf(String str,int fromIndex): 从fromIndex指定位置开始,获取ch在字符串中出现的位置
int lastindexOf(int ch) ;获取字符在字符串中最后出现的索引位置;
System.out.println(str.lastIndexOf('a'));
2.判断:
2.1 字符串中是否包含某一个子串
boolean contains();
indexOf(str):可以索引str第一次出现位置,如果返回-1表示该str不在字符串中存在,所以,也可以用于对指定字符串的判断是否包含
例: if(str.indexOf(‘a’) != -1)
该方法既可以判断是否包含,也可以获取出现的位置;
2.2 字符中是否有内容
boolean isEmpty():原理就是判断长度是否为0;
2.3 字符串是否是以指定内容开头
boolean startsWith(str);
2.4 字符串是否是以指定内容结尾;
boolean endsWith(str);
2.5 判断字符串内容是否相同;复写了object类equals的方法;
boolean equals(str);
2.6 判断内容是否相同,并忽略大小写;
boolean equalsIgnoreCase();
3.转换;
3.1 将字符数组转成字符串;
构造函数: String(char[])
String(char[],offset,count):将字符数组中的一部分转成字符串,其中:offset:索引起始位,count:需要转换的个数;
静态函数:
staticString copyValueOf(char[]);
staticString copyValueOf(char[] date, int offset, int count);
**3.2 将字符串转成字符数组;
char[] toCharArray();
3.3 将字节数组转成字符串;
String(char[])
String(char[],offset,count):将字节数组中的一部分转成字符串,
3.4 将字符串转成字节数组;
byte[]getBytes();
特殊:字符串和字节数组在转换过程中,是可以指定编码表的
3.5 将基本数据类型转成字符串;
static String valueOf(int)
3+”” == String.valueOf(3);
4.替换
Stringreplace(oldchar,newchar);
public static voidmethod_replace() {
String s="hello java";
//替换字符,如果要替换的字符不存在,返回的还是原字符
String s1 =s.replace(‘a’,’e’);
}
5.切割
String split(regex);
public static voidmethod_split() {
String s="abc,def,ghi";
//在有逗号的位置把字符串分割
String[] arr =s.split(",");
遍历打印新的数组;
for(int x=0;x<arr.length;x++) {
sop(arr[x]);
}
}
6.子串.获取字符串中的一部分
String substring(begin)
Stringsubstring(begin,end)
练习:
class StringDemo {
public static voidmain(String[] args){
method_get();
Method_trans();
String str ="StudentDemo.java";
//判断文件名称是否以"Student"开头
sop(str.startsWith("Student"));
//判断文件是否是java文件
sop(str.endsWith(".java");
//判断文件名称是否包含"Demo.";
sop(str.contains("Demo.");
}
public static voidmethod_get() {
String str ="abcdabcdefg";
//长度;
sop(str.length());
//根据索引获取字符;
//当访问到字符串中不存在角标时,会发生角标越界异常;
sop(str.charAt(4));
//根据字符获取索引
//没有找到指定的字符,返回-1;
sop(str.indexOf('b',2));
//反向索引一个字符串的位置;
sop(str.lastIndexOf("a"));
}
public static voidsop(Object obj) {
//jvm1.5以后新特性,可以打印数组,也可以打印字符串;
System.out.println(obj);
}
public static void method_trans() {
char[] arr ={'a','b','c','d','e'};
String str = newString(arr);
String str1 = newString(arr,1,4);
sop(str);
sop(str1);
}
}
7.转换,去除空格,比较;
7.1 将字符串转成大写或则小写。
String toUpperCase();
String toLowerCase();
7.2 将字符串两端的多个空格去除。
String trim();
7.3 对两个字符串进行自然顺序的比较。
intcompareTo(string);
StringBuffer是字符串缓冲区,一个容器;
特点:
1,长度是可变化的;
2,可以直接操作多个数据类型
3.最终会toString方法变成字符串;
C : create U : update R : read D: delete
1,存储
StringBuffer append(): 将指定数据作为参数添加到已有数据结尾处
StringBuffer insert(索引,数据);可以将数据插入到指定索引位置;如果超出索引范围,发生角标越界异常;
Public static void main(String[] args) {
StringBuffer sb= new StringBuffer();
StringBuffer sb1= sb.append(“abc”);
// sb == sb1;
sb.insert(1,”xxx”);//在字符串”abc”的1号索引处添加”xxx”;
}
2,删除
StringBuffer delete(start,end): 删除缓冲区中的数据,包含start,不包含end;
StringBuffer sb = new StringBuffer("abcdeg");
sb.delete(1, 3);
System.out.println(sb);//adeg
StringBuffer deleteCharAt(index): 删除指定位置的字符;
sb.deleteCharAt(0);
System.out.println(sb);//bcdeg
3.获取
char charAt(intindex) : 获取指定索引处的字符;
intindexOf(String str) : 返回字符串在容器中第一次出现的位置
intlastIndexOf(String str) : 获取字符串在容器中最后一次出现的位置;
int length() : 容器的长度;
Stringsubstring(int start, int end) : 获取子串,返回的是String;
4.修改
StringBufferreplace(start, end, string) 将容器中从start至end出的对象替换成string;
voidsetCharAt(int index, char ch) 将指定索引替换成字符;只替换单个;
5.反转;
StringBufferreverse();
6
将缓冲区中指定数据存储到指定字符数组中。
voidgetChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
JDK1.5 版本之后出现了StringBuilder.
StringBuffer是线程同步。
StringBuilder是线程不同步。
以后开发,建议使用StringBuilder
升级三个因素:
1,提高效率。
2,简化书写。
3,提高安全性。
*
基本数据类型对象包装类。
byte Byte
short short
int Integer
long Long
boolean Boolean
float Float
double Double
char Character
基本数据类型对象包装类的最常见作用,
就是用于基本数据类型和字符串类型之间做转换
基本数据类型转成字符串。
基本数据类型+""
基本数据类型.toString(基本数据类型值);
如: Integer.toString(34);//将34整数变成"34";
字符串转成基本数据类型。
xxxa = Xxx.parseXxx(String);
int a =Integer.parseInt("123");
double b =Double.parseDouble("12.23");
boolean b =Boolean.parseBoolean("true");
Integer i = newInteger("123");
int num =i.intValue();
十进制转成其他进制。
toBinaryString(); Integer.toBinaryString(6) //110
toHexString(); Integer.toHexString(60) // 3c
toOctalString();
其他进制转成十进制。
parseInt(string,radix);
int x = Integer.parseInt("3c",16); //打印结果 : 60;
Java1.5版本以后出现的新特性:
class IntegerDemo
{
publicstatic void main(String[] args)
{
//Integerx = new Integer(4);
Integerx = 4;//自动装箱。//newInteger(4)
x= x/* x.intValue() */ + 2;
//x+2:x 进行自动拆箱。变成成了int类型。和2进行加法运算。
//再将和进行装箱赋给x。
Integer m = 128;
Integern = 128;
sop("m==n:"+(m==n));
Integera = 127;
Integerb = 127;
sop("a==b:"+(a==b));//结果为true。因为a和b指向了同一个Integer对象。
//因为当数值在byte范围内容,对于新特性,如果该数值已经存在,则不会在开辟新的空间。