黑马程序员--字符串
2015-06-19 18:35
441 查看
------- android培训、java培训、期待与您交流! ----------
Java中用String类进行描述,对字符串进行了对象的封装。这样的好处是可以对字符串这种常见数据进行方便的操作。
对象封装后,可以定义N多属性和行为。
String 概述:
1. 字符串是一个特殊的对象
2. 字符串一旦初始化就不可以被改变
class Test{
public static void main(String[]
args){
String
str1 = "黑马程序员";
/*str1是一个类类型变量,“黑马程序员”是一个对象。字符串最大特点:一旦被初始化,就不可以被改变*/
//str1
= "我是黑马";
/*字符串"黑马程序员" 从未改变,改变的是
str1的指向,str1刚才指向"黑马程序员"这个对象,现在又指向"我是黑马"这个对象*/
String
str2 = new String("黑马程序员");
/*
str1跟str2有什么区别?
str1的"黑马程序员"是一个对象。
str2的"黑马程序员"是一个对象,而new
String()又是一个对象。
简单的说str1是一个对象,str2是2个对象。
*/
System.out.println(str1==str2);//false,因为Java中new出来的是另外一个对象,==号是比较对象的内存地址值是否相同,由于是不同对象,所以结果为false。
System.out.println(str1.equals(str2));//true,因为String类复写了Object类中的equals方法,建立了自己特定的比较方式,String类中比较的是字符串的内容是否相同,俩个都是"黑马程序员"所以结果为true。
}
}
字符串的常见操作:
String类是用于描述字符串事物。那么它就提供了多个方法对字符串进行操作。
1.获取
1.1 字符串中的包含的字符数,也就是字符串的长度。
1.2 根据位置获取位置上某个字符。
1.3 根据字符获取该字符在字符串中位置。
反向获取:
2. 判断
3. 转换
3.1将字符数组转成字符串两种方法:一种是构造函数,一种是静态方法。
构造函数:
静态方法:
3.2将字符串转成字符数组。
3.3 将字节数组转成字符串。
3.4 将字符串转成字节数组。
3.5 将基本数据类型转成字符串。
静态方法:
其实还有更加简单的方法可以将基本类型数据转成字符串,只要在基本类型数据的后面加上""就转成字符串了。
因为基本数据类型和字符串结果是字符串。
特殊:字符串和字节数组在转换过程中,是可以指定编码表的。
4. 替换
5. 切割
6. 子串。获取字符串中的一部分。
7. 转换,去除空格,比较。
7.1将字符串转成大写或则小写。
7.2 将字符串两端的多个空格去除。
7.3 对两个字符串进行自然顺序的比较。
注意:Java获取,开始到结束是包含头不包含尾。
模拟一个字符串去除空格:
模拟一个将字符串反转。将字符串中指定部分进行反转:
获取一个字符串在另一个字符串中出现的次数:
StringBuffer
为了提高字符串的效率,Java就按照面向对象的思想给我们已经封装好了这么一个字符串缓冲区。
是字符串缓冲区,是一个容器。字符串的组成原理就是通过该类实现的。
StringBuffer特点:
1 .长度是可以变化的。
2.可以直接操作多个数据类型。
3.
StringBuffer可以对字符串内容进行增删。
4. 最终会通过toString变成字符串。
常见功能:
1 存储
2 删除
其中:delete(0,s.length())表示清空缓冲区
3 获取
4
修改
5
反转
StringBuilder
StringBuffer 是线程同步的,效率较低,加了锁。
StringBuilder是线程不同步的,适用单线程,用于多线程不安全。
单线程情况下,建议使用 StringBuilder可以提高效率,若需要同步的话可以自己加锁。
Java升级三要素:
1 提高效率
2 简化书写
3 提高安全性
基本数据类型对象封装
基本数据类型对象包装类:
byte Byte
short Short
int Integer
long Long
boolean Boolean
float Float
double Double
char Character
基本数据类型对象包装类的最常见作用:
就是用于基本数据类型和字符串类型之间做转换
基本数据类型转成字符串。基本数据类型+""
基本数据类型.toString(基本数据类型值);
如:
Integer.toString(98);//将98整数变成"98";
字符串转成基本数据类型。
xxx a = Xxx.parseXxx(字符串);
静态方法:
int a = Integer.parseInt("123");
静态方法:
double b = Double.parseDouble("12.23");
静态方法:
boolean b = Boolean.parseBoolean("true");
字符串转成基本数据类型。
Xxx a = new Xxx(字符串);
a.xxxValue();
静态方法:
Integer i = new Integer("123");
int num = i.intValue();
十进制转成其他进制。
toBinaryString();
toHexString();
toOctalString();
其他进制转成十进制。
Integer.parseInt(string,radix);
Java中用String类进行描述,对字符串进行了对象的封装。这样的好处是可以对字符串这种常见数据进行方便的操作。
对象封装后,可以定义N多属性和行为。
String 概述:
1. 字符串是一个特殊的对象
2. 字符串一旦初始化就不可以被改变
class Test{
public static void main(String[]
args){
String
str1 = "黑马程序员";
/*str1是一个类类型变量,“黑马程序员”是一个对象。字符串最大特点:一旦被初始化,就不可以被改变*/
//str1
= "我是黑马";
/*字符串"黑马程序员" 从未改变,改变的是
str1的指向,str1刚才指向"黑马程序员"这个对象,现在又指向"我是黑马"这个对象*/
String
str2 = new String("黑马程序员");
/*
str1跟str2有什么区别?
str1的"黑马程序员"是一个对象。
str2的"黑马程序员"是一个对象,而new
String()又是一个对象。
简单的说str1是一个对象,str2是2个对象。
*/
System.out.println(str1==str2);//false,因为Java中new出来的是另外一个对象,==号是比较对象的内存地址值是否相同,由于是不同对象,所以结果为false。
System.out.println(str1.equals(str2));//true,因为String类复写了Object类中的equals方法,建立了自己特定的比较方式,String类中比较的是字符串的内容是否相同,俩个都是"黑马程序员"所以结果为true。
}
}
字符串的常见操作:
String类是用于描述字符串事物。那么它就提供了多个方法对字符串进行操作。
1.获取
1.1 字符串中的包含的字符数,也就是字符串的长度。
整数 | length()获取字符串的长度。 |
字符 | charAt(int index)获取指定索引处的字符。 |
整数 | indexOf(int ch)获取ch在字符串中第一次出现的位置。 这里接收的是char类型的值。 |
整数 | indexOf(int ch, int fromIndex) 获取ch从指定索引开始字符串中第一次出现的位置。 |
整数 | indexOf(String str) 获取指定子字符串在此字符串中第一次出现的位置。 |
整数 | indexOf(String str, int fromIndex) 获取指定位置开始,str在字符串中出现的第一次位置。 |
整数 | lastIndexOf(int ch) 获取ch在字符串最后第一次出现的位置。 |
整数 | lastIndexOf(int ch, int fromIndex) 获取ch在字符串最后第一次出现的位置,从指定位置开始。 |
整数 | lastIndexOf(String str) 获取指定子字符串在此字符串最后第一次出现的位置。 |
整数 | lastIndexOf(String str, int fromIndex) 获取指定位置开始,str在字符串最后出现的第一次位置。 |
class Test{ public static void main(String[] args){ String s ="黑马程序员"; for(int x=0;x<s.length();x++){ sop(s.charAt(x)); } sop("\r\n"); int i = 0; if((i=s.indexOf('马'))!=-1){
/*<span style="color:#000000;"><span style="line-height: 28px; font-family: 'Hiragino Sans GB W3','Hiragino Sans GB',Arial,Helvetica,simsun,u5b8bu4f53; font-size: 14px; background-color: rgb(249, 249, 249);">特殊之处:indexOf(str):可以索引str第一次出现的位置,如果返回-1,表示该str不在字符串中存在,所以,也可以用于对指定判断是否包含。</span><span style="line-height: 26px; font-family: Arial; font-size: 14px; background-color: rgb(249, 249, 249);">if(str.indexOf(“aa”)!=-1)</span></span><span style="color: red; line-height: 26px; font-family: Arial; font-size: 14px; background-color: rgb(249, 249, 249);"><span style="color:#000000;">而且该方法既可以判断,也可以获取出现位置</span>。</span> */ for(int x=++i;x<s.length();x++){ sop(s.charAt(x)); } Sop(""); } } public static void Sop(Object obj){ System.out.println(obj); } }
2. 判断
布尔型 | contains(CharSequence s) 判断字符串中是否包含一个子串,当且仅当此字符串包含指定的 char 值序列时,返回 true。 |
布尔型 | isEmpty() 判断字符串中是否有内容。原理是判断长度是否为0 |
布尔型 | startsWith(String prefix) 判断字符串是否是以指定类容开头。 |
布尔型 | endsWith(String suffix) 判断字符串是否是以指定内容结尾。 |
布尔型 | equals(Object anObject) 判断字符串内容是否相同。复写Object类的equals方法 |
布尔型 | equalsIgnoreCase(String anotherString) 判断内容是否相同,并忽略大小写。 |
class Test{ public static void main(String[] args){ String name = "ArrayTool.Java"; Sop(is_Class_File(name)); } public static boolean is_Class_FileName(String name){ String fileName = "ArrayTool.Java"; if(name!=null){ if(!name.isEmpty()){//注意:如果字符串没有内容返回的是真,有返回的是假 if(name.endsWith(".Java")){ if(name.startsWith("ArrayTool")){ if(name.equalsIgnoreCase(fileName)){ if(name.equals(fileName)){ return true; } } } } } } return false; } public static void Sop(Object obj){ System.out.println(obj); } }
3. 转换
3.1将字符数组转成字符串两种方法:一种是构造函数,一种是静态方法。
构造函数:
构造方法 |
String(char[] value) 将字符数组转成字符串。 |
String(char[] value, int offset, int count) 将字符数组中的一部分转成字符串。 |
字符串 | copyValueOf(char[] data) 将字符数组转成字符串。 |
字符串 | copyValueOf(char[] data, int offset, int count) 将字符数组中的一部分转成字符串。 |
字符数组 | toCharArray() 可以将字符串转成字符串数组。 |
构造方法 |
String(byte[] bytes) 将字节数组转成字符串。 |
String(byte[] bytes, int offset, int length) 将字节数组的一部分转成字符串。 |
字节数组 | getBytes() 将字符串转成字节数组。 |
静态方法:
字符串 | valueOf(boolean b) 将布尔型数据转成字符串。 |
字符串 | valueOf(char c) 将字符转成字符串。 |
字符串 | valueOf(double d) 将double型数据转成字符串。 |
字符串 | valueOf(float f) 将float型数据转成字符串。 |
字符串 | valueOf(int i) 将int型数据转成字符串。 |
字符串 | valueOf(long l) 将long型数据转成字符串。 |
因为基本数据类型和字符串结果是字符串。
特殊:字符串和字节数组在转换过程中,是可以指定编码表的。
4. 替换
字符串 | replace(char oldChar, char newChar) 将一个新字符替换成一个老字符。 |
字符串数组 | split(String regex) 将字符串按照规则切割成一个个小字符串。 |
字符串 | substring(int beginIndex) 获取字符串指定位置开始到结束的子串。 |
字符串 | substring(int beginIndex, int endIndex) 获取字符串指定位置开始到指定结束的子串。 |
7.1将字符串转成大写或则小写。
字符串 | toUpperCase() 将字符串转成大写。 |
字符串 | toLowerCase() 将字符串转成小写。 |
字符串 | trim() 将字符串前面和后面的空格删除。 |
整数 | compareTo(String anotherString) 将字符串按照A-Z,a-z,1-9...自然顺序进行排序。 |
模拟一个字符串去除空格:
class Test{ public static voidmain(String[] args) { String str =" 黑 马 程 序 员 "; System.out.println(trim(str)); } public static String myTrim(String str){ int start =0; int end =str.length()-1; for(;start<=end && str.charAt(start)==' ';) start++; for(;start<=end && str.charAt(end)==' ';) end--; return str.substring(start,end+1); } }
模拟一个将字符串反转。将字符串中指定部分进行反转:
class Test{ public static void main(String[] args){ Stringstr = "员序程马黑"; System.out.println(reverse(str,3,4));//黑马 System.out.println(reverse(str));//黑马程序员 } public static String reverse(String str,int start,int end){ String newStr = ""; for(int x=end-1;x>=start;x--){ newStr+=str.charAt(x); } return newStr; } public static String reverse(String str){ return reverse(str,0,str.length()); } }
获取一个字符串在另一个字符串中出现的次数:
classTest{ public static void main(String[] args){ String str = "黑马KK黑马KK黑马KK黑马"; System.out.println(mySplit(str,"黑马")); } public static int mySplit(String str,String key){ int count = 0; int index = 0; while((index = str.indexOf(key,index))!=-1){ count++; index = index+key.length(); } return count; } }
StringBuffer
为了提高字符串的效率,Java就按照面向对象的思想给我们已经封装好了这么一个字符串缓冲区。
是字符串缓冲区,是一个容器。字符串的组成原理就是通过该类实现的。
StringBuffer特点:
1 .长度是可以变化的。
2.可以直接操作多个数据类型。
3.
StringBuffer可以对字符串内容进行增删。
4. 最终会通过toString变成字符串。
常见功能:
1 存储
缓冲区 | append(boolean b) 将 boolean类型数据的字符串表示形式存储进缓存区。 |
缓冲区 | append(char c) 将char 类型数据的字符串表示形式存储进缓存区。 |
缓冲区 | append(double d) 将 double类型数据的字符串表示形式存储进缓存区。 |
缓冲区 | append(float f) 将 float类型数据的字符串表示形式存储进缓存区。 |
缓冲区 | append(int i) 将 int类型数据的字符串表示形式存储进缓存区。 |
缓冲区 | append(long lng) 将 long类型数据的字符串表示形式存储进缓存区。 |
缓冲区 | append(String str) 将 字符串类型数据的字符串表示形式存储进缓存区。 |
缓冲区 | append(StringBuffer sb) 将字符串缓存区类型数据的字符串表示形式存储进缓存区。 |
缓冲区 | delete(int start, int end) 移除此缓冲区的子字符串中的字符。 |
缓冲区 | deleteCharAt(int index) 移除此缓冲区指定位置的字符。 |
3 获取
字符 | charAt(int index) 获取指定索引处的字符。 |
整数 | indexOf(String str) 获取str在缓冲区中字符串第一次出现的位置。 |
整数 | lastIndexOf(String str) 反向获取tr在缓冲区中字符串第一次出现的位置。 |
整数 | length() 获取缓冲区字符串长度。 |
字符串 | substring(int start) 获取缓冲区字符串的子串。 |
修改
缓冲区 | replace(int start, int end, String str) 用新的字符串替换指定位置开始到指定位置结束的字符串。 |
无返回值 | setCharAt(int index, char ch) 修改指定索引的字符值。 |
反转
缓冲区 | reverse() 将缓冲区字符串倒过来写。 |
StringBuffer 是线程同步的,效率较低,加了锁。
StringBuilder是线程不同步的,适用单线程,用于多线程不安全。
单线程情况下,建议使用 StringBuilder可以提高效率,若需要同步的话可以自己加锁。
Java升级三要素:
1 提高效率
2 简化书写
3 提高安全性
基本数据类型对象封装
基本数据类型对象包装类:
byte Byte
short Short
int Integer
long Long
boolean Boolean
float Float
double Double
char Character
基本数据类型对象包装类的最常见作用:
就是用于基本数据类型和字符串类型之间做转换
基本数据类型转成字符串。基本数据类型+""
基本数据类型.toString(基本数据类型值);
如:
Integer.toString(98);//将98整数变成"98";
字符串 | toString() 返回一个表示该 Integer值的 String对象。 |
xxx a = Xxx.parseXxx(字符串);
静态方法:
整数 | parseInt(String s) 将字符串的整数数据进行转换。 |
静态方法:
双精度 | parseDouble(String s) 将字符串的双精度数据进行转换。跟 Double类的 valueOf方法一样。 |
静态方法:
布尔值 | parseBoolean(String s) 将字符串的布尔数据进行转换。 |
字符串转成基本数据类型。
Xxx a = new Xxx(字符串);
a.xxxValue();
静态方法:
整数 类型 | valueOf(String s) 获取指定字符串Integer类型数据。 |
int num = i.intValue();
十进制转成其他进制。
toBinaryString();
toHexString();
toOctalString();
其他进制转成十进制。
Integer.parseInt(string,radix);
相关文章推荐
- 黑马程序员——Java基础——Collection集合的总结
- ios 实用求职面试题
- [转]十个 iOS 面试问题
- 【剑指offer 面试题7】用两个栈实现队列
- 程序员的量化交易之路(36)--Lean之数据读取SubscriptionDataReader4
- 剑指offer 面试题1
- 2016年华为 软开实习生招聘面经(机试面试)
- 黑马程序员--JAVA基础知识学习笔记
- ABAP常见面试问题
- 简单所以不要忽视,关于\r\n和\n程序员应了解的实际应用
- PHP程序员最常犯的11个MySQL错误
- 黑马程序员————Java基础日常笔记---对多线程的理解
- 黑马程序员——Java集合类学习笔记
- 研发面试问题回答技巧
- 黑马程序员--JAVA用for循环实球99乘法表
- 《程序员修炼之道——从小工到专家》阅读笔记3
- 程序员的量化交易之路(35)--Lean之DataFeed数据槽3
- Android面试准备复习之Android知识点大扫描 .
- java程序员如何学习SAP Hybris
- 对程序员说点实在话(转)