黑马程序员--字符串类
来源:互联网 发布:数据挖掘pdf 编辑:程序博客网 时间:2024/05/17 07:23
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
1.String类
字符串是一个特殊的对象
字符串一旦初始化就不可以被改变
1.1开辟内存情况:
String str=”abc”;
String str1=new String(“abc”);
有什么区别?
s1在内存中有一个对象
s2在内存中有两个对象
方法区中有:静态区, 方法区 和常量池,常量池中存放字符串常量String
1.String s1="HelloWorld";//此处和"Hello"+"World"是相同的,会拼起来当成一个串放入常量池
当用以上方式创建实例对象时,会首先去常量池中查找,如果有指向引用,没有则开辟空间存储常量,并指向引用
2.String s5=new String("HelloWorld");
当用new创建实例对象时,会在堆内存中开辟空间存放"HelloWorld",然后再去常量池中查看是否有"HelloWorld",
如果有则与堆内存的"HelloWorld"建立关系,没有则创建之后再建立关系,此时输出s1==s5也是false,因为指向不同
3.而String s2="Hello",Strings3="World"都会在常量池中开辟空间存放字符串
4.当需要拼串时,也就是s4=s2+s3,会在堆内存中开辟空间存放新的字符串,指向s4
双等号比较的是两个引用的内存地址值:所以s1和s4不相等
String s1=”abc”
//s1是一个类类型变量,”abc”是一个对象
//字符串最大的特点:一旦被初始化就不可以被改变.
s1=”kk” //输出为kk怎么解释?是s1又指向了kk这个对象
1.2类的构成:
public final class String extends Object implements Serializable, Comparable<String>, CharSequence
//此类被final修饰,不能被继承
1.3常见操作:
1.3.1 获取
字符串中包含的字符数,也就是字符串的长度
length
public int length()
根据位置获取位置上的某个字符
charAt
public char charAt(int index)
根据位置获取位置上的某个字符
注:当访问到字符串中不存在的脚标时,会发生StringIndexOutOfBoundsException.
根据字符获取给字符在字符串中的位置
indexOf
public int indexOf(int ch) //返回的是ch在字符串中第一次出现的位置
public int indexOf(int ch, int fromIndex) //从fromIndex指定位置开始,获取ch在字符串中出现的位置
注:如果没有找到,返回-1public int indexOf(String str) //返回的是str在字符串中第一次出现的位置
public int indexOf(String str, int fromIndex)
lastIndexOf
方法和上面四个类似1.3.2判断
是否包含某一个子串
contains
public boolean contains(CharSequence s)以某个字符串开头
startsWith
public boolean startsWith(String prefix) //以某个字符串或者正则表达式开头
public boolean startsWith(String prefix, int toffset) //从某一位开始
public boolean startsWith(String prefix, int toffset) //从某一位开始
注意:特殊之处:indexOf(Stringstr),可以索引str第一次出现的位置,如果不存在返回-1,表示该str不在字符串中存在.所以,也可以用于指定字符串是否包含.
If(str.indexOf(“aa”)!=-1) //如果为真,说明找到了
而且该方法既可以判断,也可以获取出现的位置
以某个字符串结尾:endsWith
public boolean endsWith(String suffix)
equals
public boolean equals(Object anObject)判断内容是否相同,并忽略大小写
equalsIgnoreCase
public boolean equalsIgnoreCase(String anotherString)
1.3.3转换
String
public String(char[] value)
public String(char[] value, int offset, int count)
copyValueOf
public static String copyValueOf(char[] data)
public static String copyValueOf(char[] data, int offset, int count)将字符串转成字符数组
toCharArray
public char[] toCharArray()将字节数组转成字符串
String
public String(byte[] bytes)
public String(byte[] bytes, int offset, int length)
将字符串转成字节数组getBytes
public byte[] getBytes()
特殊:字符串和字节数组在转换过程中,是可以指定编码表的
将基本数据类型转成字符串valueOf
public static String valueOf(boolean b)
//3+”” = String.valueOf(3); 两个等价
1.3.4替换
public String replace(char oldChar, char newChar)
1.3.5切割
split
public String[] split(String regex)
1.3.6子串
substring
public String substring(int beginIndex)
public String substring(int beginIndex, int endIndex)获取字符串中的一部分
1.3.7转换,去除空格,比较
toUpperCase
public String toUpperCase()
toLowerCase
public String toLowerCase()将字符串两端的多个空格去除
trim
public String trim()对两个字符串进行自然顺序的比较
compareTo
public int compareTo(String anotherString)
1.4练习
1.4.1模拟trim方法,去除两端的空格
思路:
1. 判断字符串第一个位置是否是空格,如果是继续向下判断,直到不是空格为止
2. 当开始和结尾都判断不是空格时,就要获取该字符串
class TrimDemo{public static void main(String[] args){DoTrim dt=new DoTrim();String dodo=dt.getString(" lala kk ");System.out.println(dodo);System.out.println(dodo.length());}}class DoTrim{public String getString(String str){//char[] c=str.toCharArray();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.4.2将一个字符串进行翻转.将字符串中指定部分进行翻转,”abcdeg”;abfecg
思路:
1. 曾经学习过对数组的元素进行反转
2. 将字符串变成数组,对数组反转
3. 将反转后的数组变成字符串
4. 只要将或反转的部分的开始和结束为止作为参数传递即可
class RollOverDemo{public static void main(String[] args){RollOver ro=new RollOver();String arr="123456qwerty";ro.print(arr);String x=ro.rollOver(arr);ro.print(x);}}class RollOver{public String rollOver(String str,int start,int end){char[] arr=str.toCharArray();reverse(arr,start,end);return new String().valueOf(arr);}private void reverse(char[] arr,int start,int end){for(int i=start,j=end-1;i<j;i++,j--){ //包含头不包含尾swap(arr,i,j);}}public String rollOver(String str){ //全部调换位置是局部调换位置的一个特殊类型return rollOver(str,0,str.length());}private void swap(char[] arr,int begin,int end){char temp=arr[begin];arr[begin]=arr[end];arr[end]=temp;}public void print(String str){System.out.println(str);}}
1.4.3获取一个字符串在另一个字符串中出现的次数
思路:
1. 定义一个计数器
2. 获取kk第一次出现的位置
3. 从第一次出现位置后剩余的字符串中继续获取kk出现的位置.没获取一次就计数一次
4. 当获取不到时,计数完成
class CountDemo{public static void main(String[] args){String str="sdfaasdfkakka";String str1="aa";Count c=new Count();System.out.println(c.getCount1(str,str1));}}class Count{public int getCount(String sou,String res){int index=0;int count=0;while((index=sou.indexOf(res))!=-1){sou=sou.substring(index+res.length());count++;}return count;}public int getCount1(String sou,String res){int index=0;int count=0;while((index=sou.indexOf(res,index))!=-1){index+=res.length();count++;}return count;}}
1.4.4获取两个字符串中最大相同子串,第一个动作,将短的那个串进行长度依次递减的子串打印
思路:
1. 将短的那个子串按照长度递减的方式获取到
2. 将每次获取到的子串去长串中判断是否包含,包含就是找到
class MaxString{public static void main(String[] args){Max m=new Max();String a="12345jjj6";String b="yisdfsodfj";System.out.println(m.getString(a,b));}}class Max{public String getString(String a,String b){String max="";String min="";max=(a.length()>b.length())?a:b;min=(max.length()==b.length())?a:b;for(int i=0;i<min.length();i++){for(int j=0,k=min.length()-i;k<min.length();j++,k++){String x=min.substring(j,k);if(max.contains(x)){return x;}//System.out.println(x);}}return "";}}
2.StringBuffer类
字符串的组成原理就是通过该类实现的
StringBuffer可以对字符串内容进行增删操作
StringBuffer是一个容器, 所以具备了crud的操作
特点:
1. 长度是可变的;
2. 可以同时操作多个数据类型,
3. 最终会通过toString()方法变为字符串
很多方法与String相同
StingBuffer是可变长度的
2.1类结构:
public final class StringBuffer extends Object implements Serializable, CharSequence
StringBuffer也是被final修饰过得,不能被继承
2.2存储
append
public StringBuffer append(boolean b)
没有两个基本数据类型.byte和short,因为可以被int提升
将指定数据作为参数添加到已有数据结尾处
insert
public StringBuffer insert(int offset, boolean b)
可以将数据插入指定index的位置上
2.3删除
delete
public StringBuffer delete(int start, int end) //删除缓冲区中的数据,包含start,不包含end
deleteCharAt
public StringBuffer deleteCharAt(int index) //删除指定位置的字符
2.4获取
charAt
public char charAt(int index) //获得某个位置上的字符
indexOf
public int indexOf(String str) //字符串从前开始第一次出现的位置
lastIndexOf
public int lastIndexOf(String str) //字符串从后开始第一次出现的位置
length
public int length() //获取长度
substring
public String substring(int start) //截取
//注意,返回的还是String
2.5修改:
replace
public StringBuffer replace(int start,int end, String str)
//头尾和要替换的内容
setCharAt
public void setCharAt(int index, char ch)
//注意:它没有返回值,替换完即可
2.6反转:
reverse
public StringBuffer reverse()
2.7将缓冲区的指定数据存在指定数组中
public void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
3.StringBuilder类
在jdk1.5之后出现的
StringBuffer是线程同步的,StringBuilder是线程不同步的
多线程使用StringBuffer
单线程使用StringBuilder
Java升级就这几点:
1. 提高效率
2. 简化书写
3. 提高安全性
4.基本数据类型对象包装类
基本数据类型对象包装类的最常见作用.
就是用于基本数据类型和字符串类型之间做转换
基本数据类型转换成字符串
基本类型.toString(基本数据类型)
字符串转成基本数据类型
将字符串变为正数
public static int parseInt(String s)
throws NumberFormatException
jdk1.5后的新特性
Integer x=4;
X是引用数据类型,4是对象
自动装箱: new Integer(4)
自动拆箱: 变成int类型与2相加,在装箱赋给对象值
新特性的时候,会有另一个值:为null,要进行判断
Integer m=128;
Integer n=128;
值为false
Integer a=127;
Integer b=127;
值为true
结果为true,因为a和b指向了同一个Integer对象.因为当数值在byte范围内容,对于新特性,如果该数值对象已经存在,则不会再开辟新的空间
- 黑马程序员--字符串类
- 黑马程序员_字符串类
- 黑马程序员_字符串和包装类
- 黑马程序员_JAVA字符串String类
- 黑马程序员_3_字符串String类
- 黑马程序员---java字符串常用类
- 黑马程序员-字符串函数
- 黑马程序员_字符串
- 黑马程序员-字符串
- 黑马程序员 字符串分割
- 黑马程序员_JAVA_字符串
- 黑马程序员-字符串
- 黑马程序员--.net字符串
- 黑马程序员_java字符串
- 黑马程序员--字符串类型
- 黑马程序员_字符串
- 黑马程序员--java字符串
- 黑马程序员-------字符串
- VelocityTracker简介
- 用Python和Pygame写游戏-从入门到精通(4)
- RCP
- 时间日期转换
- Java线程池
- 黑马程序员--字符串类
- 基于注解的SPRINGMVC+FREEMARKER环境搭建
- iOS7修改状态栏文字颜色
- 进度条的暂停和开始
- c#Func简单使用
- android 学习 sqlite
- gson的@Expose注解和@SerializedName注解
- 企业面试题:一个三个数的式子,移动其中一根火柴,使等式成立,用程序或实现(可以用伪码),输出能成立的等式。
- ddfgdgdfgdfg