黑马程序员—JAVA基础—String类 javaAPI学习
2015-07-21 11:21
681 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
1、概念:String是java中字符串封装类。
2、String str = "abc";和String str = new String("abc");这两句代码都可以初始化String对象,当前者只有一个对象,而后者存在两个对象,"abc"是一个String对象,一旦初始化就不能改变。
示例:
获取:
int length():获取字符串的长度
char charAt(int index):获取某个位置上的字符
int indexOf(int ch):获取ch在字符串中第一次出现的位置
int indexOf(int ch, int fromIndex):从fromIndex处开始索引,获取ch在字符串中的位置
int indexOf(String str):获取str在字符串中第一次出现的位置
int indexOf(Stirng str,int fromIndex):从fromIndex开始索引,获取str出现的位置
![](https://img-blog.csdn.net/20150721115010856?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
这四个方法是从字符串反向索引。
示例:
判断:
boolean contains(CharSequence s):判断字符串是否包含某个字符
boolean startsWith(String suffix):判断字符串是否以某字符串开头
boolean startsWith(String suffix,int toffset):从指定索引位置开始,判断字符串是否以某字符串开头
boolean endsWith(String suffix):判断字符串是否以某字符串结尾
boolean equals(Object anObject):将字符串与其他对象比较
boolean equalsIgnoreCase(String anotherString):将字符串与其他字符比较,并忽略大小写
示例
转换:
将字符数组转为字符串
通过构造函数
String(char[] value):将字符数组转为字符串
String(char[] value, int offset, int count):将字符数组的一部分转为字符串
通过静态方法:
static String copyValueOf(char[] data):将字符数组转为字符串
static String copyValueOf(char[] data, int offset, int count) :将字符数组的一部分转为字符串
static String valueOf(char[] data, int offset, int count):将字符数组的一部分转为字符串
将字符串转换为字符数组
char[] toCharArray()
将字节数组转成字符串
String(byte[])
String(byte[],offset,count):将字节数组中的一部分转成字符串
将字符串转成字节数组
byte[] getBytes()
将基本数据类型转成字符串
static String valueOf(基本数据类型)
示例:
替换:
String replace(oldchar,newchar);
切割:
String[] split(regex);
获取子串
String substring(begin);从开始到字符串末尾
String substring(begin,end);从开始到自定义结尾,包含头不包含尾
转换,去除空格,比较
将字符串转成大写或则小写。
String toUpperCase();
String toLowerCase();
将字符串两端的多个空格去除。
String trim();
对两个字符串进行自然顺序的比较。
int compareTo(string);
示例:
练习2:将字符串进行反转
联系3:获取一个字符串在另一个字符串中出现的次数
4、StringBuffer和StringBuilder对象:
两者都是字符缓冲区对象,前者线程是同步的,后者线程是不同步的。开发时使用后者,如果是多线程,可以自己加同步。
特点:长度是可以变化的;可以操作多种数据类型;可以通过toString方法转换为字符串
常用方法:
存储操作:
append() 将数据添加到已有数据的末尾处
insert(index,数据) 在指定位置后添加数据
删除操作:
delete(start,end) 删除缓冲区的内容,包含头不包含尾
deleteCharAt(index) 删除指定位置的字符
获取操作:
char charAt(int index) 获取指定位置的某个字符
int indexOf(String str) 获取字符串在缓冲区的位置
int lastIndexOf(String str) 反向获取字符串的位置
int length() 获取缓冲区的长度
String substring(int start, int end) 截取缓冲区某一段字符串
修改操作:
replace(start,end,string) 将start和end之间的字符串替换成新的字符串
setCharAt(int index, char ch) 将指定位置的字符替换
反转:
reverse();
将缓冲区中指定数据存储到指定字符数组中
getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) 包含头不包含尾,指定位置开始存储到字符数组中
5、基本数据类型对象包装类
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
基本数据类型转成字符串
基本数据类型.toString(基本数据类型值);
例如:Byte.toString(2);
字符串转成基本数据类型:
例如:int i = Integer.parseInt("22");
注意:
Integer i1 = 128;
Integer i2 = 128;
i1 == i2//结果为true
Integer i3 = 127;
Integer i4= 127;
i3== i4;//结果为false
原因:当数值在byte范围内时,如果数值已经存在,就不再开辟空间,所以i3和i4是指向同一个对象。
1、概念:String是java中字符串封装类。
2、String str = "abc";和String str = new String("abc");这两句代码都可以初始化String对象,当前者只有一个对象,而后者存在两个对象,"abc"是一个String对象,一旦初始化就不能改变。
示例:
class StringDemo { public static void main(String[] args) { String s1 = "abc"; String s2 = "abc"; String s3 = new String("abc"); System.out.println(s1==s2); //运行结果为true,因为"abc"这个对象已经存在,实际上 //s1和s2是指向同一个对象 System.out.println(s1==s3); //运行结果为false,s3中是使用了new,实际上是两个对象, //所以s1和s3指向不同对象 System.out.println(s1.equals(s3)); //运行结果为true,因为String复写了Object中的equals方法, //可以用来比较内容是否相同 } }3、常用方法:
获取:
int length():获取字符串的长度
char charAt(int index):获取某个位置上的字符
int indexOf(int ch):获取ch在字符串中第一次出现的位置
int indexOf(int ch, int fromIndex):从fromIndex处开始索引,获取ch在字符串中的位置
int indexOf(String str):获取str在字符串中第一次出现的位置
int indexOf(Stirng str,int fromIndex):从fromIndex开始索引,获取str出现的位置
这四个方法是从字符串反向索引。
示例:
class StringMethodDemo { public static void main(String[] args) { String s = "abcdeafg"; System.out.println("字符串的长度为:"+s.length()); System.out.println(s.indexOf('a')); System.out.println(s.indexOf('a',4)); System.out.println(s.indexOf("de")); System.out.println(s.indexOf("de",2)); } }
判断:
boolean contains(CharSequence s):判断字符串是否包含某个字符
boolean startsWith(String suffix):判断字符串是否以某字符串开头
boolean startsWith(String suffix,int toffset):从指定索引位置开始,判断字符串是否以某字符串开头
boolean endsWith(String suffix):判断字符串是否以某字符串结尾
boolean equals(Object anObject):将字符串与其他对象比较
boolean equalsIgnoreCase(String anotherString):将字符串与其他字符比较,并忽略大小写
示例
class StringMethodDemo { public static void main(String[] args) { String s = "StringMethodDemo.java"; String s2 = "STRINGMETHODDEMO.JAVA"; System.out.println(s.startsWith("String"));//true System.out.println(s.startsWith("Method",6));//true System.out.println(s.endsWith(".java"));//true System.out.println(s.equalsIgnoreCase(s2));//true } }
转换:
将字符数组转为字符串
通过构造函数
String(char[] value):将字符数组转为字符串
String(char[] value, int offset, int count):将字符数组的一部分转为字符串
通过静态方法:
static String copyValueOf(char[] data):将字符数组转为字符串
static String copyValueOf(char[] data, int offset, int count) :将字符数组的一部分转为字符串
static String valueOf(char[] data, int offset, int count):将字符数组的一部分转为字符串
将字符串转换为字符数组
char[] toCharArray()
将字节数组转成字符串
String(byte[])
String(byte[],offset,count):将字节数组中的一部分转成字符串
将字符串转成字节数组
byte[] getBytes()
将基本数据类型转成字符串
static String valueOf(基本数据类型)
示例:
class StringMethodDemo { public static void main(String[] args) { char[] ch = new char[]{'a','b','c','d','e'}; String s1 = new String(ch); String s2 = new String(ch,1,4); System.out.println(s1);//abcde System.out.println(s2);//bcde String s3 = String.valueOf(ch); System.out.println(s3);//abcde } }
替换:
String replace(oldchar,newchar);
切割:
String[] split(regex);
获取子串
String substring(begin);从开始到字符串末尾
String substring(begin,end);从开始到自定义结尾,包含头不包含尾
转换,去除空格,比较
将字符串转成大写或则小写。
String toUpperCase();
String toLowerCase();
将字符串两端的多个空格去除。
String trim();
对两个字符串进行自然顺序的比较。
int compareTo(string);
示例:
class StringMethodDemo { public static void main(String[] args) { String s = " holle java "; String s2 = "String Method Demo"; System.out.println(s.replace('l','j'));//hojje java System.out.println(s.substring(3));//holle java System.out.println(s.substring(3,8));//holle System.out.println(s.toUpperCase());//HOLLE JAVA System.out.println(s.toLowerCase());//holle java System.out.println(s.trim());//holle java String[] arr = s2.split(" "); for (int x=0; x<arr.length; x++) { System.out.println(arr[x]); //String //Method //Demo } } }练习1:模拟String类中trim方法,去除字符串两端的空格
/* 去除字符串两端的空格 定义两个指针,一个从字符串头开始判断是否是空格,一个从尾开始 判断是否是空格,如果是空格就继续判断,知道两端都是不是空格, 就取两个指针之间的内容。 */ public static String myTrim(String s) { int start = 0;//从头判断的指针 int end = s.length()-1;//从尾判断的指针 //while循环判断多次,并且保证start小于end while (start<end && s.charAt(start)==' ') { start ++; } while (start<end && s.charAt(end)==' ') { <span style="white-space:pre"> </span>end --; } return s.substring(start,end+1); //end+1的原因是substring方法中两个参数是包含头不包含尾 }
练习2:将字符串进行反转
/* 将字符串进行反转 首先将字符串转化为字符数组,将字符数组进行反转后再转化为字符串 */ //将整个字符串进行反转 public static String myReverse(String s) { return myReverse(s,0,s.length()); } //指定开始和结束位置,将字符串进行反转 public static String myReverse(String s,int start,int end) { char[] ch = s.toCharArray();//将字符串转化为字符数组 reverse(ch,start,end);//反转字符数组的方法 return String.valueOf(ch,start,end);//将反转后的字符数组转化为字符串 } //反转字符数组的方法 public static void reverse(char[] arr,int x,int y) { for (int start=x,end=y-1; start<end; start++,end--) { swap(arr,start,end); } } //数组换位方法 public static void swap(char[] arr,int x,int y) { char temp = arr[x]; arr[x] = arr[y]; arr[y] = temp; }
联系3:获取一个字符串在另一个字符串中出现的次数
/* 获取一个字符串在另一个字符串中出现的次数 */ //方法一:不断改变字符串的长度 public static int getShowCount(String s,String key) { int count = 0;//定义计数器记录出现的次数 int index = 0;//记录出现的位置,以便减少字符串的长度 while ((index = s.indexOf(key))!=-1) { //截取出现位置的后一位到末尾,再进行判断 s = s.substring(index+key.length()); count ++; } return count; } //不断改变开始索引的位置 public static int getShowCount_2(String s,String key) { int count = 0; int index = 0; while ((index = s.indexOf(key,index))!=-1) { //改变索引的位置 index = index + key.length(); count ++; } return count; }练习4:获取两个字符串中最大相同子串
/* 获取两个字符串中最大相同子串 将一个字符串从完整到不断缩小长度,与另外一个字符串比较,看另外一个字符串 是否包含这个字符串或者子串 */ public static String getMaxSubString(String s1,String s2) { /* 对于用户传入的字符串进行判断,取短的字符串去不断截取,提高效率 */ String max = "",min = ""; max = (s1.length()>s2.length())?s1:s2; min = (max == s1)?s2:s1; for (int x=0; x<min.length(); x++) { for (int y=0,z=min.length()-x; z!=min.length()+1; y++,z++) { String temp = min.substring(y,z); if (max.contains(temp)) { return temp; } <span style="white-space:pre"> </span>} } return "没有相同子串"; }练习5:对字符串中字符进行自然顺序排序
/* 将字符串进行自然排序 将字符串转为字符数组,排序后在转换为字符串 */ public static String mySort(String s) { char[] ch = s.toCharArray(); //Arrays.sort(ch); 可以直接使用java提供的工具类 for (int x=0; x<ch.length-1; x++) { for (int y=x+1; y<ch.length; y++) { if (ch[x]>ch[y]) { swap(ch,x,y); } } } return String.valueOf(ch); } //数组换位方法 public static void swap(char[] arr,int x,int y) { char temp = arr[x]; arr[x] = arr[y]; arr[y] = temp; }练习6:
/* "12 0 99 -7 30 4 100 13" 要求对字符串中的数值进行排序。生成一个数值从小到大新字符串。 "-7 0 4 12 13 30 99 100" */ public static String mySort_2(String s) { String[] arr = s.split(" "); for (int x=0; x<arr.length-1; x++) { for (int y=x+1; y<arr.length; y++) { if (Integer.parseInt(arr[x])>Integer.parseInt(arr[y])) { swap(arr,x,y); } } } StringBuilder sb = new StringBuilder(); for (int x=0; x<arr.length; x++) { if (x!=arr.length-1) <span style="white-space:pre"> </span>sb.append(arr[x]+" "); else <span style="white-space:pre"> </span>sb.append(arr[x]); } return sb.toString(); } public static void swap(String[] arr,int a,int b) { String temp = arr[a]; arr[a] = arr[b]; arr[b] = temp; }
4、StringBuffer和StringBuilder对象:
两者都是字符缓冲区对象,前者线程是同步的,后者线程是不同步的。开发时使用后者,如果是多线程,可以自己加同步。
特点:长度是可以变化的;可以操作多种数据类型;可以通过toString方法转换为字符串
常用方法:
存储操作:
append() 将数据添加到已有数据的末尾处
insert(index,数据) 在指定位置后添加数据
删除操作:
delete(start,end) 删除缓冲区的内容,包含头不包含尾
deleteCharAt(index) 删除指定位置的字符
获取操作:
char charAt(int index) 获取指定位置的某个字符
int indexOf(String str) 获取字符串在缓冲区的位置
int lastIndexOf(String str) 反向获取字符串的位置
int length() 获取缓冲区的长度
String substring(int start, int end) 截取缓冲区某一段字符串
修改操作:
replace(start,end,string) 将start和end之间的字符串替换成新的字符串
setCharAt(int index, char ch) 将指定位置的字符替换
反转:
reverse();
将缓冲区中指定数据存储到指定字符数组中
getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) 包含头不包含尾,指定位置开始存储到字符数组中
5、基本数据类型对象包装类
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
基本数据类型转成字符串
基本数据类型.toString(基本数据类型值);
例如:Byte.toString(2);
字符串转成基本数据类型:
例如:int i = Integer.parseInt("22");
注意:
Integer i1 = 128;
Integer i2 = 128;
i1 == i2//结果为true
Integer i3 = 127;
Integer i4= 127;
i3== i4;//结果为false
原因:当数值在byte范围内时,如果数值已经存在,就不再开辟空间,所以i3和i4是指向同一个对象。
相关文章推荐
- 面试时可以向面试官提那些问题
- 推荐!国外程序员整理的 PHP 资源大全
- 剑指offer-面试题4.替换空格
- 告别迷茫与忧伤的程序员
- 面试-阻塞队列及线程池
- 面试-锁相关
- 面试-并发概述
- 面试-JVM
- 黑马程序员—— 6,多态
- 面试-MySQL
- 索引面试题荟萃
- 黑马程序员——java基础——多态
- 黑马程序员----JAVA基础----IO流_1
- 黑马程序员——java基础——接口
- Java面试-Hibernate总结
- 黑马程序员——Java交通灯管理系统&银行业务系统
- Web程序员开发5个诀窍
- 程序员开发编程经验知识总结
- 几道坑人的PHP面试题 试试看看你会不会也中招
- 面试时碰到的一道数据库题目