一 概念
字符串或串(String)是由数字、字母、下划线组成的一串字符。一般记为 s=“a1a2···an”(n>=0)。它是编程语言中表示文本的数据类型。String类适用于描述字符事物,那么它就提供了多个方法对字符串进行操作。那么常见的操作有哪些?字符串常见操作:
1 String类构造函数
String(byte[ ] bytes)//通过byte数组构造字符串对象。
String(char[ ] value)//通过char数组构造字符串对象。
String(String str)//构造一个str的副本。即:拷贝一个str。
String(StringBuffer buffer)//通过StringBuffer数组构造字符串对象。
例如:
byte[] b = {'a','b','c','d','e','f','g','h','i','j'};
char[] c = {'0','1','2','3','4','5','6','7','8','9'};
String s1 = new String(b);//abcdefghij
String s2 = new String(b,3,2);//de
String s3 = new String(c);//0123456789
String s4 = new String(c,3,2);//34
String s5 = new String(sb);//abcdefghij
System.out.println("s1:"+s1);
System.out.println("s2:"+s2);
System.out.println("s3:"+s3);
System.out.println("s4:"+s4);
System.out.println("s5:"+s5);
输出结果:s1:abcdefghij
s2_sub:de
s3:0123456789
s4_sub:34
s5_copy:abcdefghij
int indexOf(int ch,int fromIndex);//从fromIndex指定位置开始,获取ch在字符串中出现的位置
int indexOf(String str);//返回的是str在字符串中第一次出现的位置
int indexOf(String str,int fromIndex)//从fromIndex指定的位置开始,获取str在字符串中出现的位置
int lastIndexOf(int ch);获取ch在字符串中最后出现的位置
3 判断
1)字符串中是否包含某一个子串。4 转换:
1)将字符数组转换成字符串。String(Char[ ] value)
String(Char[ ] value,int offset,int count)//将字符数组中的一部分转成字符串
注意:字符串和字节数组在转换过程中,是可以指定编码表的。
7 子串
获取字符串中的一部分8 转换,去除空格 比较
1)将字符串转换成大写或者小写public class Test {
public static void main(String args[]){
System.out.println( reverseString("一二三四五六七"));
}
public static String reverseString(String s) {
char[] chs = s.toCharArray();
reverse(chs);
return new String(chs);
}
private static void reverse(char[] arr) {
// TODO Auto-generated method stub
for (int start = 0, end = arr.length - 1; start < end; start++, end--) {
swap(arr, start, end);
}
}
private static void swap(char[] arr, int start, int end) {
// TODO Auto-generated method stub
char tmp = arr[start];
arr[start] = arr[end];
arr[end] = tmp;
}
}
打印结果为:
七六五四三二一
二 字符串在内存中的对象个数
String s1="abc"
String s2=new String("abc");
问:s1和s2之间有什么区别
答:s1在内存中有一个对象,s1是一个类型变量,"abc"是一个对象,字符串最大的特点:一旦被初始化就不可以被改变(不是指s1不可以被改变)。s2在内存中有两个对象(new是一个,”abc”是一个)。
1 基本类型转化成字符串有三种方法
1) 使用String的valueOf方法2 字符串转换成基本类型有两个方法
1) 调用基本类型封装类的parseXxx静态方法。package com.kid.string;
public class BasicTypeToString {
public String int2str(int n) {
//3种转换方法实现转换
//第一种
//return new Integer(n).toString();
//第二种,注意""中间没有空格
//return "" + n;
//第三种
return String.valueOf(n);
}
public int str2int(String str) {
//2种方法实现转换
//第一种
//return new Integer(str).intValue();
//第二种
return Integer.parseInt(str);
}
public String double2str(double d) {
//return new Double(d).toString();
//return "" + d;
return String.valueOf(d);
}
public double str2double(String str) {
//return new Double(str).doubleValue();
return Double.parseDouble(str);
}
//其他基本类型与字符串相互转化这里不一一列出,方法都类似
public static void main(String[] args) {
BasicTypeToString test = new BasicTypeToString();
int n = 123;
String str1 = test.int2str(n);
System.out.println("test.int2str(n) = " + str1);
System.out.println("test.str2int(str) = " + test.str2int(str1));
double d = 12.345;
String str2 = test.double2str(d);
System.out.println("test.double2str(d) = " + str2);
System.out.println("test.str2double(str) = " + test.str2double(str2));
}
}
打印结果为:
test.int2str(n) = 123
test.str2int(str) = 123
test.double2str(d) = 12.345
test.str2double(str) = 12.345
四 StringBuffer与StringBuilder类
StringBuffer append();//将指定数据作为参数添加到已有数据结尾处
StringBuffer insert(intdex,数据)//可以将数据插入待指定index位置。
删除:
StringBuffer delete(int start,int end)//删除缓冲区中的数据,包含start,不包含end
StringBuffer deleteCharAt( int index)//删除指定位置的字符
获取:
Char charAt(int index)
int indexOf(String str)
int lastIndexOf(String str)
int length()
String subString(int start,int end)
修改:
StringBuffer replace(int start,int end,String)
void setCharAt(int index,char ch)
反转:
StringBuffer reverse(String str)
将缓冲区中指定数据存储到指定字符数组:
void getChars(int srcBegin,int srcEnd,char[] dest,int destBegin)
2.StringBuilder
五 字符编码集
主要的字符编码集 ASCII utf-8 Unicode(UTF-16) gbk gb2312 ISO8859-1之间的区别和特点:六 关于字符编码集的经典“联通问题”
“联通”问题: