-----<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
String s1 = "abd";//s1是一个类类型变量,“abc”是一个对象。
//字符串最大特点,一旦被初始化就不可以被改变。
String s2 = new String("abc");
s1 和 s2 有什么区别呢
s1在内存中有一个对象
s2在内存中有两个对象。
System.out.println(s1==s2); flase
System.out.println(s1.equals(s2)); true
String类复写了object类中equals方法,
该方法用于判断字符串是否相同。
String 类适用于描述字符串事物,
那么他就提供了多了方法对字符串进行操作。
常见的操作有哪些?
“abcdef”
1,获取
1, 字符串中的包含的字符数,也就是字符窜的长度。
int length(); 获取长度。
2, 根据位置获取某位置上某个字符。
char charAt(int index);
3, 根据字符获取该字符在字符串中的位置。
int indexOf(int ch);返回的是ch在字符窜中第一次出现的位置。
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);
public static void method_get()
class StringMethodDemo
{
String str = "abcdeakpf";
//求长度
//System.out.pringln(str.length());
sop(str.length()); //9
//根据索引 获取字符
sop(str.charAt(4));e
当访问到字符串中不存在的角标时会发生StringIndexOfBoundsException。
//根据字符获取索引
sop(str.indexOf('m',3)) -1
//反向索引一个字符出现的位置
sop(str.lastIndexOf("a")); 5
从右往左查找,角标还是从左开始。
}
public static void sop(Object obj)
{
System.out.println(obj);
}
public static void main(String [] args)
{
}
}
2,判断。
2,1 字符串中是否包含某一个子串
boolean contains(str);
特殊之处:indexOf(str):可以索引str第一次出现位置
如果返回值-1 表示该str不在字符串中存在。所以也可以用于对指定判断是否包含。
if(str.indexOf("aa")!=-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();
public static void method_is()
{
String str = "ArrayDemo.java";
//判断文件名称是否是Array开头
sop(str.startsWith("Array")); true
//判断文件名称是否是.java文件
sop(str.endsWith(".java")); true
//判断文件中是否包含Demo
sop(str.contains("Demo")) true
}
3.转换。
3.1 将字符数组转成字符串
构造函数: String(char[])
String(char[] ,offset ,count)
将字符数组中的一部分转成字符串
静态方法:static String copyValueOf(char[]);
static String copyValueOf(char[] date,int offset ,int count);
static String valueOf(char[]);
3.2 将字符串转成字符数组**重要
char[] toCharArray();
3.3 将字节数组转成字符串
String(byte[]);
String(byte[],offset , count);
3.4 将字符串转成字节数组
byte[] getByte();
3.5将基本数据类型转成字符串
static String valueOf(int);
static String valueOf(double);
//3+"" ;// String.valueOf(3);
特殊;字符串和字节数组在转换过程中,是可以指定编码表的。理解
public static void method_trans()
{
char[] arr = {'a','b';'c';'d';'e';'f'}
String s = new String(arr,1,3);从1开始数3个。
sop("s="+s);
String s1 = "zxcvbnm";
char[] chs = s1.toCharArray();
for(int x= 0 ; x < chs.length ;x++)
{
sop("ch = "+chs[x]);
}
}
4,替换
String replace(oldchar , newchar);
public static void method_replace()
{
String s = "hello java";//如果替换的字符不存在,返回原串
String s1 = s.replace('a','n');
sop("s = "+s); //s=hello java
sop("s1 = " +s1); //s1=hello jnvn
}
5.切割
String[] split(regex);
public static void method_split()
{
String s = "zhangsan,lishi,wangwu";
String[] arr = s.split(",");
for(int x = 0 ;x < arr.length ;x++)
{
sop(arr[x]);
}
}
结果:zhangsan
lishi
wangwu
6.子串,获取字符串的一部分
String substring(begin);
String substring(begin,end);
public static void method_split()
{
String s = "abcdef"
sop(s.substring(2));从指定位置开始到末尾
sop(s.substring(2,4));包含头 不包含尾。
}
7.转换,去除空格,比较
1,将字符串转成大写或则小写
String toUpperCase();
String toLowerCase();
2, 将字符串两端的多个空格去除
String trim();
3,对两个字符串进行自然顺序的比较
int compareTo(string);
public static void method_7()
{
String s = " Hello Java "
sop(s.toLowerCase());
sop(s.toUpperCase());
sop(s.trim());
String s1 = "abc";
String s2 = "aaa";
sop(s1.compareTo(s2)); //-1
}
结果
---hello java---
---HELLO JAVA---
Hello Java
练习1,去掉字符串两端空格。
//分析从两侧分别取''前大于后,子串取值。
public class StringDemo {
public static void main(String[] args) {
String s = " abd dg ";
sop(s);
s = myTrim(s);
sop(s);
}
public static void sop(String str)
{
System.out.println(str);
}
public static String myTrim(String str)
{
int start = 0, end = str.length()-1;
while(start <= end && str.charAt(start)==' ')
start++;
while(start <= end && str.charAt(end)==' ')
end--;
return str.substring(start,end+1);
}
}
将字符串反转
1 将字符串变成数组
2,对数组反转
3,数组变成字符串
public class StringDemo {
public static void main(String[] args) {
String s = " abd dg ";
sop(s);
sop(reverseString(s));
}
public static void sop(String str)
{
System.out.println(str);
}
public static String reverseString(String s)
{
//字符串变数组。
char[] chs = s.toCharArray();
//反转数组。
reverse(chs);
//将数组变成字符串。
return new String(chs);
}
private static void reverse(char[] arr)
{
for(int start = 0 ,end =arr.length -1;start < end;start++,end--)
{
swap(arr,start,end);
}
}
private static void swap(char[] arr,int x,int y)
{
char temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}
}
将字符串中部分反转
public class StringDemo {
public static void main(String[] args) {
String s = " abd dg ";
sop(s);
sop(reverseString(s,1,8));
}
public static String reverseString(String s,int start,int end)
{
//字符串变数组。
char[] chs = s.toCharArray();
//反转数组。添加开始,结束
reverse(chs,start,end);
//将数组变成字符串。
return new String(chs);
}
public static String reverseString(String s)
{
return "";//重载。
}
private static void reverse(char[] arr, int x ,int y)
{
for(int start = x ,end =y-1;start < end;start++,end--)
{
swap(arr,start,end);//定义开始结束
}
}
private static void swap(char[] arr,int x,int y)
{
char temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}
public static void sop(String str)
{
System.out.println(str);
}
}
练习3 获取一个字符串在另一个字符串中出现的次数
思路: 定义一个
获取kk第一次出现的位置
从第一次出现位置后,剩余的字符串中继续获取kk出现的位置每当获取一次就计数一次
当获取不到时,计数完成。
class StringTest2
{
public static int getSubCount(String str,String key)
{
int count = 0;
int index = 0;
while((index = str.indexOf(key))!=-1)
{
sop("str="+str);
str = str.substring(index+key.length());
count++;
}
return count;
}
public static void main(String [] args)
{
String str = "abkkcdkkefkkskk";
sop("count="+getSubCount(str,"kk"));
}
public static void sop(String str)
{
System.out.println(str);
}
{
public static int getSubCount1(String str,String key)
{
int count = 0;
int index = 0;
while((index = str.indexOf(key,index))!=-1)
{
sop("index="+index);
index = index +key.length();
count++;
}
return count;
}
public static void main(String [] args)
{
String str = "abkkcdkkefkkskk";
sop("count="+getSubCount1(str,"kk"));
}
public static void sop(String str)
{
System.out.println(str);
}
}
//练习4 最大相同字符串
class StringTest4
{
public static String getMaxSubString(String s1,String s2)
{
for(int x = 0;x < s2.length() ;x++)
{
for(int y = 0 , z = s2.length()-x ;z!=s2.length()+1;y++ ,z++)
{
String temp = s2.substring(y,z);
//sop(temp);
if(s1.contains(s2))
return temp;
}
}
return "";
}
public static void main(String [] args)
{
String s1 = "wgsdfgasklfmfskld";
String s2 = "sdgesf";
sop(getMaxSubString(s1,s2));
}
public static void sop(String str)
{
System.out.println(str);
}
}
StringBuffer:字符串缓冲区
特点:
是一个容器CURD
而且长度是变化的
可以添加操作多个数据类型。
最终通过toString方法变成字符串。 比数组方便。
c create U update R read D delete
1,存储
在 StringBuffer append();将制定数据作为参数添加到已有数据的结尾处。
在 StringBuffer insert(index ,数据)可以将指定数据插入到指定index位置。
public class StringBuffer {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
sb.append("abc").append(true).append(34);
// StringBuffer sb1 = sb.append(34);
sop(sb.toString());
// sop(sb1.toString());//输出结果一样34
sb.insert(1,"qq");//可以在1位置(b处)后插入qq
}
public static void sop(String str)
{
System.out.println(str);
}
}
2删除
delete 包含头不包含尾
StringBuffer delete(start,end); 删除缓冲区数据。
StringBuffer deleteCharAt(index);删除指定位置的字符
public class StringBuffer {
public static void main(String[] args)
{
method_del();
}
public static void method_del()
{
StringBuffer sb = new StringBuffer("abcde");
//清空缓冲区
//sb.delete(0,sb.length);
sb.delete(2,3)
sop(sb.toString());
}
public static void mothed_add()
{
StringBuffer sb = new StringBuffer();
sb.append("abc").append(true).append(34);
sop(sb.toString());
}
public static void sop(String str)
{
System.out.println(str);
}
}
3获取
char charAt(int index);
int indexOf(String str);
int lastIndexOf(String str);
int length();
String substring(int start,int end);
4修改
StringBuffer replace(start , end ,string)
void setCharAt(int index ,char ch)
public class StringBuffer
{
public static void main(String[] args)
{
method_update();
}
public static void method_update()
{
StringBuffer sb = new StringBuffer("abcde");
//bcde-->java
sb.replace(1,4,"java");
sop(sb.toString());
}
public static void mothed_add()
{
StringBuffer sb = new StringBuffer();
sb.append("abc").append(true).append(34);
sop(sb.toString());
}
public static void sop(String str)
{
System.out.println(str);
}
}
5.反转
StringBuffer reverse();
6.将缓冲区指定数据存储到指定数组中,
void getChars(int srcBegin ,int srcEnd, char[] dst,int dstBegin)
7.StringBuffer 是线程同步 多线程用
StringBuilder 是线程不同步。 单线程用
java升级3个因素
1提高效率
2简化书写
3提高安全性
-----<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
String s1 = "abd";//s1是一个类类型变量,“abc”是一个对象。
//字符串最大特点,一旦被初始化就不可以被改变。
String s2 = new String("abc");
s1 和 s2 有什么区别呢
s1在内存中有一个对象
s2在内存中有两个对象。
System.out.println(s1==s2); flase
System.out.println(s1.equals(s2)); true
String类复写了object类中equals方法,
该方法用于判断字符串是否相同。
String 类适用于描述字符串事物,
那么他就提供了多了方法对字符串进行操作。
常见的操作有哪些?
“abcdef”
1,获取
1, 字符串中的包含的字符数,也就是字符窜的长度。
int length(); 获取长度。
2, 根据位置获取某位置上某个字符。
char charAt(int index);
3, 根据字符获取该字符在字符串中的位置。
int indexOf(int ch);返回的是ch在字符窜中第一次出现的位置。
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);
public static void method_get()
class StringMethodDemo
{
String str = "abcdeakpf";
//求长度
//System.out.pringln(str.length());
sop(str.length()); //9
//根据索引 获取字符
sop(str.charAt(4));e
当访问到字符串中不存在的角标时会发生StringIndexOfBoundsException。
//根据字符获取索引
sop(str.indexOf('m',3)) -1
//反向索引一个字符出现的位置
sop(str.lastIndexOf("a")); 5
从右往左查找,角标还是从左开始。
}
public static void sop(Object obj)
{
System.out.println(obj);
}
public static void main(String [] args)
{
}
}
2,判断。
2,1 字符串中是否包含某一个子串
boolean contains(str);
特殊之处:indexOf(str):可以索引str第一次出现位置
如果返回值-1 表示该str不在字符串中存在。所以也可以用于对指定判断是否包含。
if(str.indexOf("aa")!=-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();
public static void method_is()
{
String str = "ArrayDemo.java";
//判断文件名称是否是Array开头
sop(str.startsWith("Array")); true
//判断文件名称是否是.java文件
sop(str.endsWith(".java")); true
//判断文件中是否包含Demo
sop(str.contains("Demo")) true
}
3.转换。
3.1 将字符数组转成字符串
构造函数: String(char[])
String(char[] ,offset ,count)
将字符数组中的一部分转成字符串
静态方法:static String copyValueOf(char[]);
static String copyValueOf(char[] date,int offset ,int count);
static String valueOf(char[]);
3.2 将字符串转成字符数组**重要
char[] toCharArray();
3.3 将字节数组转成字符串
String(byte[]);
String(byte[],offset , count);
3.4 将字符串转成字节数组
byte[] getByte();
3.5将基本数据类型转成字符串
static String valueOf(int);
static String valueOf(double);
//3+"" ;// String.valueOf(3);
特殊;字符串和字节数组在转换过程中,是可以指定编码表的。理解
public static void method_trans()
{
char[] arr = {'a','b';'c';'d';'e';'f'}
String s = new String(arr,1,3);从1开始数3个。
sop("s="+s);
String s1 = "zxcvbnm";
char[] chs = s1.toCharArray();
for(int x= 0 ; x < chs.length ;x++)
{
sop("ch = "+chs[x]);
}
}
4,替换
String replace(oldchar , newchar);
public static void method_replace()
{
String s = "hello java";//如果替换的字符不存在,返回原串
String s1 = s.replace('a','n');
sop("s = "+s); //s=hello java
sop("s1 = " +s1); //s1=hello jnvn
}
5.切割
String[] split(regex);
public static void method_split()
{
String s = "zhangsan,lishi,wangwu";
String[] arr = s.split(",");
for(int x = 0 ;x < arr.length ;x++)
{
sop(arr[x]);
}
}
结果:zhangsan
lishi
wangwu
6.子串,获取字符串的一部分
String substring(begin);
String substring(begin,end);
public static void method_split()
{
String s = "abcdef"
sop(s.substring(2));从指定位置开始到末尾
sop(s.substring(2,4));包含头 不包含尾。
}
7.转换,去除空格,比较
1,将字符串转成大写或则小写
String toUpperCase();
String toLowerCase();
2, 将字符串两端的多个空格去除
String trim();
3,对两个字符串进行自然顺序的比较
int compareTo(string);
public static void method_7()
{
String s = " Hello Java "
sop(s.toLowerCase());
sop(s.toUpperCase());
sop(s.trim());
String s1 = "abc";
String s2 = "aaa";
sop(s1.compareTo(s2)); //-1
}
结果
---hello java---
---HELLO JAVA---
Hello Java
练习1,去掉字符串两端空格。
//分析从两侧分别取''前大于后,子串取值。
public class StringDemo {
public static void main(String[] args) {
String s = " abd dg ";
sop(s);
s = myTrim(s);
sop(s);
}
public static void sop(String str)
{
System.out.println(str);
}
public static String myTrim(String str)
{
int start = 0, end = str.length()-1;
while(start <= end && str.charAt(start)==' ')
start++;
while(start <= end && str.charAt(end)==' ')
end--;
return str.substring(start,end+1);
}
}
将字符串反转
1 将字符串变成数组
2,对数组反转
3,数组变成字符串
public class StringDemo {
public static void main(String[] args) {
String s = " abd dg ";
sop(s);
sop(reverseString(s));
}
public static void sop(String str)
{
System.out.println(str);
}
public static String reverseString(String s)
{
//字符串变数组。
char[] chs = s.toCharArray();
//反转数组。
reverse(chs);
//将数组变成字符串。
return new String(chs);
}
private static void reverse(char[] arr)
{
for(int start = 0 ,end =arr.length -1;start < end;start++,end--)
{
swap(arr,start,end);
}
}
private static void swap(char[] arr,int x,int y)
{
char temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}
}
将字符串中部分反转
public class StringDemo {
public static void main(String[] args) {
String s = " abd dg ";
sop(s);
sop(reverseString(s,1,8));
}
public static String reverseString(String s,int start,int end)
{
//字符串变数组。
char[] chs = s.toCharArray();
//反转数组。添加开始,结束
reverse(chs,start,end);
//将数组变成字符串。
return new String(chs);
}
public static String reverseString(String s)
{
return "";//重载。
}
private static void reverse(char[] arr, int x ,int y)
{
for(int start = x ,end =y-1;start < end;start++,end--)
{
swap(arr,start,end);//定义开始结束
}
}
private static void swap(char[] arr,int x,int y)
{
char temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}
public static void sop(String str)
{
System.out.println(str);
}
}
练习3 获取一个字符串在另一个字符串中出现的次数
思路: 定义一个
获取kk第一次出现的位置
从第一次出现位置后,剩余的字符串中继续获取kk出现的位置每当获取一次就计数一次
当获取不到时,计数完成。
class StringTest2
{
public static int getSubCount(String str,String key)
{
int count = 0;
int index = 0;
while((index = str.indexOf(key))!=-1)
{
sop("str="+str);
str = str.substring(index+key.length());
count++;
}
return count;
}
public static void main(String [] args)
{
String str = "abkkcdkkefkkskk";
sop("count="+getSubCount(str,"kk"));
}
public static void sop(String str)
{
System.out.println(str);
}
{
public static int getSubCount1(String str,String key)
{
int count = 0;
int index = 0;
while((index = str.indexOf(key,index))!=-1)
{
sop("index="+index);
index = index +key.length();
count++;
}
return count;
}
public static void main(String [] args)
{
String str = "abkkcdkkefkkskk";
sop("count="+getSubCount1(str,"kk"));
}
public static void sop(String str)
{
System.out.println(str);
}
}
//练习4 最大相同字符串
class StringTest4
{
public static String getMaxSubString(String s1,String s2)
{
for(int x = 0;x < s2.length() ;x++)
{
for(int y = 0 , z = s2.length()-x ;z!=s2.length()+1;y++ ,z++)
{
String temp = s2.substring(y,z);
//sop(temp);
if(s1.contains(s2))
return temp;
}
}
return "";
}
public static void main(String [] args)
{
String s1 = "wgsdfgasklfmfskld";
String s2 = "sdgesf";
sop(getMaxSubString(s1,s2));
}
public static void sop(String str)
{
System.out.println(str);
}
}
StringBuffer:字符串缓冲区
特点:
是一个容器CURD
而且长度是变化的
可以添加操作多个数据类型。
最终通过toString方法变成字符串。 比数组方便。
c create U update R read D delete
1,存储
在 StringBuffer append();将制定数据作为参数添加到已有数据的结尾处。
在 StringBuffer insert(index ,数据)可以将指定数据插入到指定index位置。
public class StringBuffer {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
sb.append("abc").append(true).append(34);
// StringBuffer sb1 = sb.append(34);
sop(sb.toString());
// sop(sb1.toString());//输出结果一样34
sb.insert(1,"qq");//可以在1位置(b处)后插入qq
}
public static void sop(String str)
{
System.out.println(str);
}
}
2删除
delete 包含头不包含尾
StringBuffer delete(start,end); 删除缓冲区数据。
StringBuffer deleteCharAt(index);删除指定位置的字符
public class StringBuffer {
public static void main(String[] args)
{
method_del();
}
public static void method_del()
{
StringBuffer sb = new StringBuffer("abcde");
//清空缓冲区
//sb.delete(0,sb.length);
sb.delete(2,3)
sop(sb.toString());
}
public static void mothed_add()
{
StringBuffer sb = new StringBuffer();
sb.append("abc").append(true).append(34);
sop(sb.toString());
}
public static void sop(String str)
{
System.out.println(str);
}
}
3获取
char charAt(int index);
int indexOf(String str);
int lastIndexOf(String str);
int length();
String substring(int start,int end);
4修改
StringBuffer replace(start , end ,string)
void setCharAt(int index ,char ch)
public class StringBuffer
{
public static void main(String[] args)
{
method_update();
}
public static void method_update()
{
StringBuffer sb = new StringBuffer("abcde");
//bcde-->java
sb.replace(1,4,"java");
sop(sb.toString());
}
public static void mothed_add()
{
StringBuffer sb = new StringBuffer();
sb.append("abc").append(true).append(34);
sop(sb.toString());
}
public static void sop(String str)
{
System.out.println(str);
}
}
5.反转
StringBuffer reverse();
6.将缓冲区指定数据存储到指定数组中,
void getChars(int srcBegin ,int srcEnd, char[] dst,int dstBegin)
7.StringBuffer 是线程同步 多线程用
StringBuilder 是线程不同步。 单线程用
java升级3个因素
1提高效率
2简化书写
3提高安全性
-----<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------