JAVA基础复习与总结<五> String类_File类_Date类
String类
1、Java字符串就是Unicode字符序列,例如串“Java”就是4个Unicoe字符组成。
2、Java没有内置的字符串类型,而是在标准java类库中提供了一个预定义的类String,每个用双引号括起来的字符串都是String类的一个实例/对象。
3、String称为不可变字符序列
Java中的String类型是不可改变字符串,所谓的不可改变就是,一旦你对它赋值以后,它的值就不会再发生变化。
例:
String a= "abc";//a = "abc"
a = a+"def";//a = “abcdef"
看似a的值已经发生了改变,但其实不是这样的,实际上Java虚拟机是重新开辟了一个内存,用来存储字符串"abcdef",这时候a指向了新生成的字符串,而"abc"在内存中还是存在的,这就是不可改变的含义,这个字符串一旦生成,它的值就不会发生变化。
4、String类字符串作为常量值存储在方法区
String a1 = “abcd”;
String a2 = “abcd”;
boolean y = (a1 == a2 );
//这里y是true的,在内存分析那一章节里学过,字符串作为常量值存储在方法区。
因此若是直接复制的话,a1与a2指向方法区的同一个内容,因此相等 。
反而若是使用new String[ ] 来复制,虽然两者赋值相同,但是==反馈的结果就是false,因为两者指向的是不同的对象,即地址值不等。
5、String类的常用方法
(1)求字符串长度
String str = “123”;
int strlength = str.length;
(2)求字符串某一位置字符
String str = “123”;
char ch = str.charAt(0); //ch = 1;
(3)提取子串
String str1 = new String(“123123”);
String str2 = str1.substring(2); // str2 = “3123”
String str3 = str1.substring(2,3); // str2 = “312”
//.substring()方法中第一个参数规定子串起始位置,第二个参数字符串结束位置
(4)字符串比较
String str1 = new String(“abc”);
String str2 = new String(“ABC”);
int a =str1.compareTo(str2); // a > 0 ;
int b =str2.compareTo(str1); // b < 0 ;
boolean c = str1.euqals(str2); //c = false
boolean d = str1.euqalsIgnoreCase(str2); //c = true
(5)字符串连接
public String concat(String str)//将参数中的字符串str连接到当前字符串的后面,效果等价于"+"。
1 String str = "aa".concat("bb").concat("cc");
2 相当于String str = "aa"+"bb"+"cc";
(6)字符串中单个字符查找
1)public int indexOf(int ch/String str)//用于查找当前字符串中字符或子串,返回字符或子串在当前字符串中从左边起首次出现的位置,若没有出现则返回-1。
2)public int indexOf(int ch/String str, int fromIndex)//改方法与第一种类似,区别在于该方法从fromIndex位置向后查找。
3)public int lastIndexOf(int ch/String str)//该方法与第一种类似,区别在于该方法从字符串的末尾位置向前查找。
4)public int lastIndexOf(int ch/String str, int fromIndex)//该方法与第二种方法类似,区别于该方法从fromIndex位置向前查找。
1 String str = "I am a good student";
2 int a = str.indexOf('a');//a = 2
3 int b = str.indexOf("good");//b = 7
4 int c = str.indexOf("w",2);//c = -1
5 int d = str.lastIndexOf("a");//d = 5
6 int e = str.lastIndexOf("a",3);//e = 2
(7)字符串中字符的大小写转换
1)public String toLowerCase()//返回将当前字符串中所有字符转换成小写后的新串
2)public String toUpperCase()//返回将当前字符串中所有字符转换成大写后的新串
1 String str = new String("asDF");
2 String str1 = str.toLowerCase();//str1 = "asdf"
3 String str2 = str.toUpperCase();//str2 = "ASDF"
(8)字符串中字符的替换
1)public String replace(char oldChar, char newChar)//用字符newChar替换当前字符串中所有的oldChar字符,并返回一个新的字符串。
2)public String replaceFirst(String regex, String replacement)//该方法用字符replacement的内容替换当前字符串中遇到的第一个和字符串regex相匹配的子串,应将新的字符串返回。
3)public String replaceAll(String regex, String replacement)//该方法用字符replacement的内容替换当前字符串中遇到的所有和字符串regex相匹配的子串,应将新的字符串返回。
1 String str = "asdzxcasd";
2 String str1 = str.replace('a','g');//str1 = "gsdzxcgsd"
3 String str2 = str.replace("asd","fgh");//str2 = "fghzxcfgh"
4 String str3 = str.replaceFirst("asd","fgh");//str3 = "fghzxcasd"
5 String str4 = str.replaceAll("asd","fgh");//str4 = "fghzxcfgh"
(9)其他类方法
1)String trim()//截去字符串两端的空格,但对于中间的空格不处理。
1 String str = " a sd ";
2 String str1 = str.trim();
3 int a = str.length();//a = 6
4 int b = str1.length();//b = 4
2)boolean statWith(String prefix)或boolean endWith(String suffix)//用来比较当前字符串的起始字符或子字符串prefix和终止字符或子字符串suffix是否和当前字符串相同,重载方法中同时还可以指定比较的开始位置offset。
1 String str = "asdfgh";
2 boolean a = str.statWith("as");//a = true
3 boolean b = str.endWith("gh");//b = true
3)regionMatches(boolean b, int firstStart, String other, int otherStart, int length)//从当前字符串的firstStart位置开始比较,取长度为length的一个子字符串,other字符串从otherStart位置开始,指定另外一个长度为length的字符串,两字符串比较,当b为true时字符串不区分大小写。
4)contains(String str)//判断参数s是否被包含在字符串中,并返回一个布尔类型的值。
1 String str = "student";
2 str.contains("stu");//true
3 str.contains("ok");//false
5)String[] split(String str)//将str作为分隔符进行字符串分解,分解后的字字符串在字符串数组中返回。
1 String str = "asd!qwe|zxc#";
2 String[] str1 = str.split("!|#");//str1[0] = "asd";str1[1] = "qwe";str1[2] = "zxc";
(10)字符串转换为基本类型
java.lang包中有Byte、Short、Integer、Float、Double类的调用方法:
1)public static byte parseByte(String s)
2)public static short parseShort(String s)
3)public static short parseInt(String s)
4)public static long parseLong(String s)
5)public static float parseFloat(String s)
6)public static double parseDouble(String s)
例如:
1 int n = Integer.parseInt("12");
2 float f = Float.parseFloat("12.34");
3 double d = Double.parseDouble("1.124");
(11)基本类型转换为字符串类型
String类中提供了String valueOf()放法,用作基本类型转换为字符串类型。
1)static String valueOf(char data[])
2)static String valueOf(char data[], int offset, int count)
3)static String valueOf(boolean b)
4)static String valueOf(char c)
5)static String valueOf(int i)
6)static String valueOf(long l)
7)static String valueOf(float f)
8)static String valueOf(double d)
例如:
1 String s1 = String.valueOf(12);
2 String s1 = String.valueOf(12.34);
(12)进制转换
使用Long类中的方法得到整数之间的各种进制转换的方法:
Long.toBinaryString(long l)
Long.toOctalString(long l)
Long.toHexString(long l)
Long.toString(long l, int p)//p作为任意进制
6、可变字符序列StringBulider和StringBuffer
package TestStringBuilder;
//测试可变字符序列,StringBuilder(线程不安全,效率高) 和 StringBuffer(线程安全,效率低)
public class Test01 {
public static void main(String[] args){
StringBuilder sb = new StringBuilder(); //字符数组长度初始为16
StringBuilder sb1 = new StringBuilder(32); //字符数组长度初始为32
StringBuilder sb2 = new StringBuilder("abcd"); //字符数组长度初始为16+4 =20,value[]={'a','b','c','d',\u0000,...}
sb2.append("efg"); //加入
sb2.append(true); //相当于加了个字符串相连
sb2.append("ll").append("sadas").append(212); //通过return this实现方法链
}
}
File类
java.io.File类: 文件和目录路径名的抽象表示形式
通过File对象可以访问文件的属性。
public boolean canRead() public boolean canWrite()
public boolean exists() public boolean isDirectory()
public boolean isFile() public boolean isHidden()
public long lastModified() public long length()
public String getName() public String getPath()
通过File对象创建空文件或目录(在该对象所指的文件或目录不存在的情况下)。
public boolean createNewFile() throws IOException
public boolean delete
public boolean mkdir(), midis() //注意两者区别
Date类
java.util.Date
在标准Java类库中包含一个Date类,它的对象表示一个特定的瞬间,精确到毫秒。
Java中时间到表示说白了也是数字,是从:标准纪元1970.1.1日的0点开始到某刻时刻的毫秒数,类型是long。
代码:TestDate.java
java.text.DateFormat; //用来将字符串与时间互换
DateFormat和SimpleDateFormat
完成字符串和时间对象的转化!
format
parse
代码:TestSimpleFormat.java
Calendar日历类
GregorianCalendar是Calendar的一个具体子类,提供了世界上大多数国家/地区使用的标准日历系统。
注意:月份:一月是0,二月是1,以此类推,12月是11
星期:周日是1,周一是2....周六是7
代码:TestCalendar.java