String及常用类的使用
前言
String类表示字符串,Java程序中的所有字符串都作为此类的对象。
String类不是基本数据类型,它是一个类。
因为对象的初始化默认值是null,所以String类对象的初始化默认值也是null。
String是一种特殊的对象:
- String字符串是常量,字符串的值在创建之后不能更改。
- String类是final修饰的最终类,因此不能被继承。
一、创建String对象
String str="hello";//可以直接使用双引号来创建一个字符串字面值常量
//还可以借助于String类包含的以下构造方法:
String str2=new String("java");
char[] charArray={'刘','经','陶'};
String str3=new String(charArray);
String str4=new String(charArray,1,2);//从‘经’字开始,截取两个字符
String 创建的字符串存储在公共池中,而 new 创建的字符串对象在堆上:
String s1 = "Run"; // String 直接创建
String s2 = "Run"; // String 直接创建
String s3 = s1; // 相同引用
String s4 = new String("Run"); // String 对象创建
String s5 = new String("Run"); // String 对象创建
注意:
String 类是不可改变的,所以你一旦创建了 String 对象,那它的值就无法改变了。
concat(String str)可以在String类字符串后面增加字符串。而该方法实际创建了一个新String字符串。
如果需要对字符串做很多修改,那么应该选择使用 StringBuffer & StringBuilder 类。
二、字符串的“相等”比较
比较字符串常用的两个方法是运算符= =和String类的equals方法。
使用“==”比较两个字符串,是比较两个对象在内存中的地址是否一致,本质上就是判断两个变量是否指向同一个对象,如果是则返回true,否则返回false。而String类的equals方法则是比较两个String字符串的内容是否一致,返回值也是一个布尔类型。
在比较字符串时还要知道“常量池”的概念:在第一次生成某个字符串时,这个字符串就会被复制到JVM的一个特定的内存中,这个内存就被称为“常量池”。以后,如果再次创建了相同内容的字符串,JVM就直接返回常量池中已有的字符串。
三、创建格式化字符串
我们知道输出格式化数字可以使用 printf() 和 format() 方法。
String 类使用静态方法 format() 返回一个String 对象而不是 PrintStream 对象。
String 类的静态方法 format() 能用来创建可复用的格式化字符串,而不仅仅是用于一次打印输出。
System.out.printf("浮点型变量的值为 " +
"%f, 整型变量的值为 " +
" %d, 字符串变量的值为 " +
"is %s", floatVar, intVar, stringVar);
String fs;
fs = String.format("浮点型变量的值为 " +
"%f, 整型变量的值为 " +
" %d, 字符串变量的值为 " +
" %s", floatVar, intVar, stringVar);
四、String类的常用方法
char charAt(int index)
String concat(String str)
int length()
int indexOf(String str)
int indexOf(String str,int fromIndex)
boolean equalsIgnoreCase(String another)
String replace(char oldChar,char newChar)
boolean startsWith(String prefix)
boolean endsWith(String suffix)
String toUpperCase()
String toLowerCase()
String substring(int beginIndex)
String substring(int beginIndex,int endIndex)
String trim()
static String valueOf(基本数据类型参数)
静态方法是通过类名.方法名直接调用的。例如:String result=String.valueOf(100);
String[] split(String regex)
五、StringBuffer类和StringBuilder类
和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。
1.在使用 StringBuffer 类时,每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,所以如果需要对字符串进行修改推荐使用 StringBuffer。 2.由于 StringBuilder 相较于 StringBuffer 有**速度优势**,所以多数情况下建议使用 StringBuilder 类。 3.StringBuilder类和StringBuffer之间的最大不同在于StringBuilder的方法是非线程安全的,而StringBuffer是线程安全的。
1.StringBuffer方法
StringBuffer append(String s)
StringBuffer reverse()
delete(int start,int end)
insert (int offset,int i)
insert (int offset,String str)
replace(int start,int end,String str)
六、日期类
Date定义的常用方法:
Date(long millisec)
long getTime()
boolean after(Date date)
boolean before(Date date)
1.获取当前日期时间:
public class DateDemo {
public static void main(String[] args) {
// 初始化 Date 对象
Date date = new Date();
// 使用 toString() 函数显示日期时间
System.out.println(date.toString());
}
}
2.日期比较:
Java使用以下三种方法来比较两个日期:
- 使用 getTime() 方法获取两个日期(自1970年1月1日经历的毫秒数值),然后比较这两个值。
- 使用方法 before(),after() 和 equals()。例如,一个月的12号比18号早,则 new Date(99, 2,
12).before(new Date (99, 2, 18)) 返回true。 - 使用 compareTo() 方法,它是由 Comparable 接口定义的,Date 类实现了这个接口。
3.使用SimpleDateFormat格式化日期
在SimpleDateFormat中,是通过构造方法指定Date的输出格式的,并且设置这些格式时需要使用时间通配符,“yyyy-MM-dd HH:mm:ss”
public class DateDemo {
public static void main(String[] args) {
Date dNow = new Date( );
SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd hh:mm:ss");
System.out.println("当前时间为: " + ft.format(dNow));
}
}
除了将Date以固定格式的形式输出以外,SimpleDateFormat还可以通过format方法,将某个固定格式的字符串转换为一个Date类型: