---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----------------------
String类
字符串类同于描述字符串事物。如姓名等。
字符串是一个特殊的对象
字符串一旦初始化就不可以被改变,即一个字符串常量。
字符串是常量;它们的值在创建之后不能更改。
字符串缓冲区支持可变的字符串。因为 String 对象是不可变的,所以可以共享。
例如:
String str = "abc";
等效于:
char data[] = {'a', 'b', 'c'};
String str = new String(data);
即,此处有4个对象。
String s1 = "abc"//s1是一个类类型对象,"abc"是一个对象。
s1 = "kk"。此时改变的不是"abc"对象,而是str所执行的对象地址。
String s2 = new String("abc");
s1 与 s2的区别。
s1在内存中有一个对象。
s2在内存中有两个对象。
注:String类是一个终类,即不能被继承。
String类常见的操作:
1,获取:
1.1,字符串中包含的字符数,也就是字符串的长度。
int length()--获取长度。1.2,根据位置获取位置上的某个字符。
char charAt(int index)1.3,根据字符获取在字符串中的位置。
int indexOf(int ch)--返回的是ch在字符串中第一次出现的位置。--从fromIndex指定的位置开始,获得ch在字符串中出现的位置。
int indexOf(char ch,int fromIndex)--返回的是str在字符串中第一次出现的位置。
int indexOf(String str)--从fromIndex指定的位置开始,获得str在字符串中第一次出现的位置。
int indexOf(String str,int fromIndex)--获得字符串中最后一个字符(也可以是字符串)ch出现的位置
int lastIndexOf(char ch)。2,判断:
2.1,字符串中是否包含某一个子串
boolean contains(String str)特殊之处:indexOf(String str):可以索引str第一次出现的位置,如果返回-1表示str不在字符串中。
所以,也可以用于判断字符串中是否包含指定的子串。if(str.indexOf("a") != -1)
且该方法既可以判断,也可以获取子串出现的位置。
2.2,字符串中是否有内容。boolean isEmpty():原理是判断字符串长度是否为0.(1.6版本后才有)
2.3,字符串是否是一指定内容开头。
boolean startWith(String str)2.4,字符串是否是一指定内容结尾。
boolean endWith(String str)2.5,判断字符串内容是否相等,覆写了Object类中的toString()方法。
boolean equals(String str)2.6,判断字符串内容是否相等,并忽略大小写。
boolean equalsIgnoreCase(String str)
3,转换:3.1,将字符串数组转成字符串。
构造函数:String(char[])
//将字符数组中的从offset位置的count个字符转成字符串。
String(char[] chs,int offset,int count)静态方法:
//返回指定数组中表示该字符序列的 String。static String copyValueOf(char[] chs);
//返回指定数组中一部分表示该字符序列的 String。static String copyValueOf(char[] chs,int offset,int count)
static String valueOf(char[] chs);3.2,将字符串转成字符数组。
char[] toCharArray();
3.3,将字节数组转换成字符串。String(byte[] bs)
//将字节数组中的一部分转成字符串String(byte[] bs,int offset,int count)
3.4,将字符串转成字节数组byte[] getBytes();
3.5,将基本数据类型转成字符串。static String valueOf(int)
static String valueOf(double).
.
.
特殊:字符串和字节数组在转换过程中,是可以指定编码表的。
4,替换:
4.1String replace(oldchar,newchar);5,切割:
5.1String[] split(String str);6,子串,获取字符串中的一部分:
//从begin开始截取到字符串末尾。6.1String substring(int begin);
//从begin位置开始截取到end-1.6.2String substring(int begin,int end);包含头,不包含尾。!!
7,大小写转换,取出空格,比较。
7.1,大小写转换
//转成大写String toUpperCase();
//转成小写String toLowerCase();
7.2,将字符串两端空格去掉。
String trim();7.3,对两个字符串进行字典比较
//区分大小写比较String compareTo(String str);
//不区分大小写比较String compareToIgnoreCase(String str);
示例代码:
package com.itheima.stringdemos;
import java.util.Arrays;
/**
* 字符串中常用操作的测试类
* @author wuyong
*
*/
public class StringTest {
/**
* @param args
*/
public static void main(String[] args) {
String str = "abcsfgae3";
sop("=================获取=================");
// 1.1,字符串中包含的字符数,也就是字符串的长度。
sop(str.length());
// 1.2,根据位置获取位置上的某个字符。
sop(str.charAt(3));
// 1.3,根据字符获取在字符串中的位置。
sop("f的位置--" + str.indexOf('f'));
// 从fromIndex指定的位置开始,获得ch在字符串中出现的位置。
sop("e的位置--" + str.indexOf('e', 3));
// --返回的是str在字符串中第一次出现的位置。
sop("cs的位置--" + str.indexOf("cs"));
// --从fromIndex指定的位置开始,获得str在字符串中第一次出现的位置。
sop("bc的位置--" + str.indexOf("bc",4));
// --获得字符串中最后一个字符(也可以是字符串)ch出现的位置
sop("最后a的位置--" + str.lastIndexOf('a'));
sop("=================判断=================");
// 2.1,字符串中是否包含某一个子串
sop("fg是否存在--" + str.contains("fg"));
// 2.2,字符串中是否有内容。
sop("str是否为空字符串--" + str.isEmpty());
// 2.3,字符串是否是一指定内容开头。
sop("str是否已12开头的位置--" + str.startsWith("12"));
// 2.4,字符串是否是一指定内容结尾。
sop("字符串str是否以es结尾--" + str.endsWith("es"));
// 2.5,判断字符串内容是否相等,覆写了Object类中的toString()方法。
sop("字符串str是否等于asd--" + str.equals("asd"));
// 2.6,判断字符串内容是否相等,并忽略大小写。
sop("str忽略大小写是否等于abcsFGaE3--" + str.equalsIgnoreCase("abcsFGaE3"));
sop("=================转换=================");
// 3.1,将字符串数组转成字符串。
char[] chs = {'a','2','s','e'};
String chsStr = new String(chs);
sop("构造函数下chsStr--" + chsStr);
// //将字符数组中的从offset位置的count个字符转成字符串。
chsStr = new String(chs,2,2);
sop("多参构造函数chsStr--" + chsStr);
// 静态方法:
sop("copyValueOf(char[] chs)方法chsStr--" + String.copyValueOf(chs));
sop("copyValueOf(char[] chs,off,count)chsStr--" + String.copyValueOf(chs,1,2));
sop("valueOf==chsStr--" + String.valueOf(chs));
// 3.2,将字符串转成字符数组。
char[] chs2 = chsStr.toCharArray();
for (char c : chs2) {
sop(c);
}
// 3.3,将字节数组转换成字符串。
byte[] bs = {98,49,112,97};
sop("String(byte[] bs) --" + new String(bs));;
// //将字节数组中的一部分转成字符串
sop("String(byte[] bs,off,count) --" + new String(bs,0,3));
// 3.4,将字符串转成字节数组
byte[] bs2 = new String(bs).getBytes();
for (byte b : bs2) {
sop(b);
}
// 3.5,将基本数据类型转成字符串。
sop(String.valueOf(3));
sop(String.valueOf(12.45));
// .
// .
// .
// 特殊:字符串和字节数组在转换过程中,是可以指定编码的
}
/**
* 自定义输出方法,封装了System.out.println()语句
* @param obj
*/
public static void sop(Object obj) {
System.out.println(obj);
}
}
StringBuffer
StringBuffer是字符串缓冲区,是一个容器,
线程安全的可变字符序列。特点:
1,其长度是可以变化的。
2,可以操作多个数据类型。3,最终或通过toString方法变成字符串。
通常会有一下操作:
1,C create 增加
2,U update 修改3,R read 查看
4,D delete 删除
1,存储:
1,初始化时的,传入参数可以存储。new StringBuffer(形参)2,StringBuffer append(形参);将指定数据作为参数添加到数据结尾处。
3,StringBuffer insert(index,数据):将数据插入到指定位置index处。2,删除:
StringBuffer delete(int start,int end):删除缓冲区中的数据,包含start,包含end。
StringBuffer deleteCharAt(int index):删除指定位置的字符。
3,获取:char charAt(int index):获取指定位置的字符
int indexOf(String str):获取指定字符串的位置int lastIndexOf(String str):获取指定字符串的最后出现的位置
int length():获取缓冲区的长度。String substring(int start,int end):获取字符串中start开始到end位置的子串。
4,修改:StringBuffer repalce(int start,int end,String str);将start位置到end位置替换成str字符串。
void setChartAt(int index,char ch):将指定位置的子符替换成ch。5,反转:
StringBuffer reverse():反转。
StringBuffer与StringBuilder的区别和关系:
StringBuilder:
StringBuilder是JDK1.5新加的功能,目的在于提高对字符串的操作的效率。
区别:1,StringBuffer在多线程时,线程安全的可变字符序列,但是由于同步的原因,每次都要判断锁,所以效率较低。
2,StringBuilder 是线程不安全的,但是效率比StringBuffer高,开发中优先使用它。关系:
StringBuilder提供了与StringBuffer提供了兼容的功能。示例代码:
package com.itheima.stringdemos;
/**
* StringBuffer的相关操作
* @author wuyong
*
*/
public class StringBufferTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
sop("--------------存储----------------");
buffer_add();
sop("--------------删除----------------");
buffer_del();
sop("--------------获取----------------");
buffer_get();
sop("--------------修改----------------");
buffer_modify();
sop("--------------反转----------------");
buffer_reverse();
}
/**
* 存储
*/
private static void buffer_add() {
//初始化时添加数据
StringBuffer sb = new StringBuffer("abc");
//用append方法添加到数据末尾。
sb.append('t').append(true).append(123);
//用insert方法将指定值插入到指定位置。
sb.insert(2, "QQ");
sop("存储--》sb == " + sb);
}
/**
* 删除
*/
public static void buffer_del() {
StringBuffer sb = new StringBuffer("abcdefg123345");
sop("删除前--》" + sb);
sb.delete(2, 5);
sop("delete(int start,int end):删除后--》" + sb);
sb.deleteCharAt(8);
sop("deleteCharAt(int index):删除后--》" + sb);
//清空StringBuffer
sop("清空后的长度--》" + sb.delete(0, sb.length()).length());
}
/**
* 获取
*/
public static void buffer_get() {
StringBuffer sb = new StringBuffer("abcdefag123345");
sop("sb是--》" + sb);
//char charAt(int index);获取指定位置的字符
sop("下标为2的字符是--》" + sb.charAt(2));
//int indexOf(String str):获取指定字符串的位置
sop("字符串“123”的开始位置是--》" + sb.indexOf("123"));
//int lastIndexOf(String str):获取指定字符串的最后出现的位置
sop("最后一个a出现的位置是--》" + sb.lastIndexOf("a"));
//int length():获取缓冲区的长度。
sop("sb的长度是--》" + sb.length());
//String substring(int start,int end):获取字符串中start开始到end位置的子串。
sop("sb中下标2到6的字符串是--》" + sb.substring(2, 6));
}
/**
* 修改
*/
public static void buffer_modify() {
StringBuffer sb = new StringBuffer("abcde");
sop("sb在替换前--》" + sb);
sop("sb调用repace替换后是--》" + sb.replace(1, 3, "12"));
sb.setCharAt(0, 'W');
sop("sb调用setCharAt替换后是--》" + sb);
}
/**
* 反转
*/
public static void buffer_reverse() {
StringBuffer sb = new StringBuffer("12345");
sop("sb反转前是--》" + sb);
sop("sb反转后是--》" + sb.reverse());
}
/**
* 自定义的输出的方法
* @param obj
*/
public static void sop(Object obj) {
System.out.println(obj);
}
}
---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----------------------