赞
踩
目录
①使用字符串常量直接初始化一个String对象
String str = "abc";
②使用String的构造方法初始化字符串对象
- // 创建一个空的字符串
- String str1 = new String();
-
- // 创建一个内容为abcd的字符串
- String str2 = new String("abcd");
-
- // 创建一个内容为字符数组的字符串
- char []charArray = new char[] {'A','B','C'};
- String str3 = new String(charArray);
①字符串的基本操作:
- String str = new String("Hello World");
- System.out.println("字符串长度:"+str.length());
- System.out.println("字符l第一次出现的位置:"+str.indexOf("l"));
- System.out.println("字符l最后一次出现的位置:"+str.lastIndexOf("l"));
- System.out.println("字符串中的第一个字符:"+str.charAt(0));
- /* 访问字符串中的字符时,不能超出字符的索引范围,否则会出现异常 */
②字符串的转换操作:
- String str = new String("Hello World");
- System.out.print("将字符串转为字符数组的结果:");
- char charArray[] = str.toCharArray();
- for(int i = 0 ; i < str.length(); ++i)
- {
- // 如果不是数组最后一个元素,则在元素后面加逗号
- if(i != str.length()-1)
- System.out.print(charArray[i]+",");
- else
-
- System.out.println(charArray[i]);
- }
-
- System.out.println("将int值转换为String类型之后的结果:"+String.valueOf(12345));
-
- String str2 = "you are beautiful";
- System.out.println("将字符串转换成大写之后的结果:"+str2.toUpperCase());
③字符串的替换和去除空格操作:
- String str4 = "test";
- System.out.println("将test替换成Test的结果"+str4.replace("test", "Test"));
-
- String str5 = " J a v a S c r i p t ";
- System.out.println("去除字符串两端空格后的结果:"+str5.trim());
- System.out.println("去除字符串所有空格后的结果:"+str5.replace(" ", ""));
④字符串的判断操作:
- String str6 = "String";
- String str7 = "Str";
- System.out.println("判断字符串是否以Str开头:"+str6.startsWith("Str"));
- System.out.println("判断字符串是否以ing结尾:"+str6.endsWith("ing"));
- System.out.println("判断字符串是否包含字符串tring:"+str6.contains("tring"));
- System.out.println("判断字符串是否为空:"+str6.isEmpty());
- System.out.println("判断两个字符串是否相等:"+str6.equals(str7));
⑤字符串的截取和分割:
- // 字符串截取操作
- String str8 = "羽毛球-篮球-乒乓球";
- System.out.println("从第5个字符截取到末尾的结果:"+str8.substring(4));
- System.out.println("从第5个字符截取到第6个字符的结果:"+str8.substring(4,6));
-
- // 字符串分割操作
- System.out.print("分割后的字符串数组的元素依次为:");
- String[] StringArray = str8.split("-"); // 将字符串转换为字符串数组
- for(int i = 0; i<StringArray.length; ++i)
- {
- if(i != StringArray.length-1)
- System.out.print(StringArray[i]+",");
- else
- System.out.print(StringArray[i]);
- }
为了便于对字符串的修改,在JDK中提供了一个StringBuffer类(也称字符串缓冲区)。StringBuffer类和String类最大的区别在于它的内容和长度都是可以改变的。StringBuffer类似一个字符容器,当在其中添加或删除字符时,并不会产生新的StringBuffer对象。
- StringBuffer strff = new StringBuffer("Hello");
-
- System.out.println("添加参数到StringBuffer对象:"+strff.append(" World"));
- System.out.println("在字符串中的某个位置插入字符串:"+strff.insert(5, "(你好)"));
- System.out.println("移除此序列指定位置的字符:"+strff.deleteCharAt(0));
-
- System.out.println("删除StringBuffer对象指定范围内的字符或字符串序
- 列:"+strff.delete(0, 4));
- System.out.println("在StringBuffer对象中替换指定的字符或字符串序
- 列:"+strff.replace(0, 4, "Bye"));
-
- System.out.println("修改指定位置index处的字符序列:"+strff.setCharAt(0, 'f'));
- System.out.println("返回StringBuffer缓冲区中的字符串:"+strff.toString());
- System.out.println("将字符串用反转形式取代:"+strff.reverse());
-
- /*
- append()方法始终将这些字符添加到缓冲区的末尾,而insert()方法则可以在指定的位置添加字符。
- */
StringBuffer类和String类有很多相似之处,初学者使用时容易混淆。
1 、 String 类表示的字符串是常量,一旦创建后,内容和长度都是无法改变的。 StringBuffer 表示字符容器,其内容和长度都可以随时修改。在操作字符串时,如果该字符串仅用于表示数据类型,则使用 String 类即可,但是如果需要对字符串中的字符进行增删操作,则使用 StringBuffer 类。2 、 String 类覆盖了 Object 类的 equals() 方法,而 StringBuffer 类没有覆盖 Object 类的 equals() 方法3 、 String 类对象可以用操作符“ + ”进行连接,而 StringBuffer 类对象之间不能
System类定义了一些与系统相关的属性和方法,它所提供的属性和方法都是静态的,因此,想要引用这些属性和方法,直接使用System类调用即可。
①getProperties()方法
System类的getProperties()方法用于获取当前系统的全部属性,该方法会返回一个Properties对象,其中封装了系统的所有属性,这些属性是以键值对的形式存在
- // 获取当前系统的全部属性
- Properties property = System.getProperties();
-
- // 获取所有系统属性的key,返回Enumeration对象
- Enumeration propertyNames = property.propertyNames();
- while(propertyNames.hasMoreElements()) {
- // 获取系统属性的键
- String key = (String)propertyNames.nextElement();
-
- // 获取当前键key对应的值
- String value = System.getProperty(key);
- System.out.println(key + "————》"+value);
- }
②currentTimeMillis()方法
currentTimeMillis()方法返回一个long类型的值,该值表示当前时间与1970年1月1日0点0分0秒之间的时间差,单位是毫秒,习惯性地被称作时间戳。
- long startTime = System.currentTimeMillis(); // 循环开始的当前时间
- int sum = 0;
- for(int i = 0; i<1000000; ++i)
- {
- sum += i;
- }
- long endTime = System.currentTimeMillis(); // 循环结束后的当前时间
- System.out.println("程序运行的时间为:"+(endTime-startTime)+"毫秒");
③arraycopy(Object src,int srcPos,Object dest,int destPos,int length)方法
arraycopy()方法用于将一个数组中的元素快速拷贝到另一个数组。其中的参数具体作用如下:
src:表示源数组
dest:表示目标数组src
Pos:表示源数组中拷贝元素的起始位置dest
Pos:表示拷贝到目标数组的起始位置
length:表示拷贝元素的个数
需要注意的是,在进行数组复制时,目标数组必须有足够的空间来存放拷贝的元素,否则会发生角标越界异常。
- int[] fromArray = {101,102,103,104,105,106}; // 源数组
- int[] toArray = {201,202,203,204,205,206,207};// 目标数组
-
- System.arraycopy(fromArray, 2, toArray, 3, 4);
- // 打印目标数组中的元素
- for(int i = 0; i<toArray.length; i++) {
- System.out.println(i+":"+toArray[i]);
- }
-
创建了两个数组fromArray和toArray,分别代表源数组和目标数组,当调用arraycopy()方法进行元素拷贝时,由于指定了从源数组中索引为2的元素开始拷贝,并且拷贝4个元素存放在目标数组中索引为3的位置,因此,在打印目标数组的元素时,程序首先打印的是数组toArray的前三个元素201、202、203,然后打印的是从fromArray中拷贝的四个元素。
Runtime类用于表示虚拟机运行时的状态,它用于封装JVM 虚拟机进程。每次使用 java 命令启动虚拟机都对应一个 Runtime 实例,并且只有一个实例,因此该类采用单例模式进行设计,对象不可以直接实例化。若想在程序中获得一个 Runtime 实例,只能通过以下方式:由于 Runtime 类封装了虚拟机进程,因此,在程序中通常会通过该类的实例对象来获取当前虚拟机的相关信息。
- Runtime rt = Runtime.getRuntime();
- System.out.println("处理器的个数:"+rt.availableProcessors()+"个");
- System.out.println("空闲内存数量:"+rt.freeMemory()/1024/1024+"M");
- System.out.println("最大可用内存数量:"+rt.maxMemory()/1024/1024+"M");
通过“Runtime.getRuntime()”方式创建了一个Runtime的实例对象,并分别调用该对象的availableProcessors()方法、freeMemory()方法和maxMemory()方法,将当前虚拟机的处理器个数、空闲内存数和可用最大内存数的信息打印出来。
Runtime 类中提供了一个exec()方法,该方法用于执行一个dos命令,从而实现和在命令行窗口中输入dos命令同样的效果。
- Runtime rt = Runtime.getRuntime(); // 创建一个Runtime实例对象
- Process process = rt.exec("notepad.exe");// 得到表示进程的Process对象
- try {
- Thread.sleep(3000); // 程序休眠3秒
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- process.destroy(); // 杀掉进程
-
通过调用Process对象的destroy()方法,将打开的记事本关闭了。为了突出演示的效果,使用了Thread类的静态方法sleep(long millis)使程序休眠了3秒,因此,程序运行后,会看到打开的记事本在3秒后自动关闭了。
Math类是数学操作类,提供了一系列用于数学运算的静态方法,包括求绝对值、三角函数等。Math类中有两个静态常量PI和E,分别代表数学常量π和e
- System.out.println("计算绝对值的结果:"+Math.abs(-1));
- System.out.println("求大于参数的最小整数:"+Math.ceil(5.6));
- System.out.println("求小于参数的最大整数:"+Math.floor(-4.2));
- System.out.println("对小数进行四舍五入后的结果:"+Math.round(-4.6));
- System.out.println("求两个数的较大值:"+Math.max(2.1, -2.1));
- System.out.println("求两个数的最小值:"+Math.min(2.1, -2.1));
- System.out.println("生成一个大于等于0.0小于1.0的随机值:"+Math.random());
Math类的常用方法进行了演示。从运行结果中可以看出每个方法的作用。需要注意的是,round()方法用于对某个小数进行四舍五入,此方法会将小数点后面的数字全部忽略,返回一个int值。而ceil()方法和floor()方法返回的都是double类型的数,这个数在数值上等于一个整数。
在JDK的java.util包中有一个Random类,它可以在指定的取值范围内随机产生数字。在Random类中提供了两个构造方法
Random类的两个构造方法,其中第一个构造方法是无参的,通过它创建的Random实例对象每次使用的种子是随机的,因此每个对象所产生的随机数不同。如果希望创建的多个Random实例对象产生相同序列的随机数,则可以在创建对象时调用第二个构造方法,传入相同的种子即可。
- Random r = new Random(); // 不传入种子
- // 随机产生10个【0,100】之间的整数
- for(int i = 0; i<10 ; i++)
- {
- System.out.println(r.nextInt(100));
- }
- Random r = new Random(10); // 传入种子
- // 随机产生10个【0,100】之间的整数
- for(int i = 0; i<10 ; i++)
- {
- System.out.println(r.nextInt(100));
- }
相对于Math的random()方法而言,Random类提供了更多的方法来生成各种伪随机数,不仅可以生成整数类型的随机数,还可以生成浮点类型的随机数
表中列出了Random类常用的方法,其中,Random类的nextDouble()方法返回的是0.0和1.0之间double类型的值,nextFloat()方法返回的是0.0和1.0之间float类型的值,nextInt(int n)返回的是0(包括)和指定值n(不包括)之间的值。
在Java中,很多类的方法都需要接收引用类型的对象,此时就无法将一个基本数据类型的值传入。为了解决这样的问题,JDK中提供了一系列的包装类,通过这些包装类可以将基本数据类型的值包装为引用数据类型的对象。
包装类和基本数据类型在进行转换时,引入了装箱和拆箱的概念,其中装箱是指将基本数据类型的值转为引用数据类型,反之,拆箱是指将引用数据类型的对象转为基本数据类型
- // 装箱:
-
- int a = 20;
- Integer it = new Integer(a);
- System.out.println(it.toString());
- /*
- 装箱过程,在创建Integer对象时,将int类型的变量a作为参数传入,
- 从而转为Integr类型。由于Object类是所有类的父类,因此,通过调用toString()方法,
- 成功将Integer的值以字符串的形式打印出来。
- */
- // 拆箱:
-
- Integer it = new Integer(20);
- int sum = it.intValue();
- System.out.println(sum);
- /*
- 拆箱的过程,Integer对象通过调用intValue()方法,将Integer对象转为int类型,
- 从而可以与int类型的变量sum进行正确打印。
-
- */
在使用包装类时,需要注意以下几点:
• 包装类都重写了Object类中的toString()方法,以字符串的形式返回被包装的基本数据类型的值。
• 除了Character外,包装类都有valueOf(String s)方法,可以根据String类型的参数创建包装类对象,但参数字符串s不能为null,而且字符串必须是可以解析为相应基本类型的数据,否则虽然编译通过,但运行时会报错。
• 除了Character外,包装类都有parseXXX(String s)的静态方法,将字符串转换为对应的基本类型的数据。参数s不能为null,而且同样必须是可以解析为相应基本类型的数据,否则虽然编译通过,但运行时会报错。
在JDK的java.util包中提供了一个Date类用于表示日期和时间。Date类中大部分构造方法都被声明为已过时,只有两个构造方法是建议使用的,一个是无参的构造方法Date(),用来创建当前日期时间的Date对象。另一个是接收一个long型参数date的构造方法Date(long date),用于创建指定时间的Date对象,其中date参数表示1970年1月1日0时0分0(称为历元)以来的毫秒数,即时间戳。
- import java.util.Date;
-
- public class Test_Date {
-
- public static void main(String[] args) {
- Date date1 = new Date(); // 创建表示当前时间的Date对象
- Date date2 = new Date(96666661);// 创建表示时间戳的Date对象
- System.out.println(date1);
- System.out.println(date2);
- }
-
- }
Calendar类用于完成日期和时间字段的操作,它可以通过特定的方法设置和读取日期的特定部分,比如年、月、日、时、分和秒等。Calendar类是一个抽象类,不可以被实例化,在程序中需要调用其静态方法getInstance()来得到一个Calendar对象,然后调用其相应的方法,具体示例如下:
- 实例一:
-
- import java.util.Calendar;
-
- public class Test_Calendar {
-
- public static void main(String[] args) {
-
- Calendar calendar = Calendar.getInstance();
- calendar.set(2008, 7, 8);
- calendar.add(Calendar.DATE, 100);
- int year = calendar.get(Calendar.YEAR);
- int month = calendar.get(Calendar.MONTH);
- int date = calendar.get(Calendar.DATE);
- System.out.println("日期:"+year+"年"+month+"月"+date+"日");
-
- /*
- 调用Calendar的set()方法将日期设置为2008年7月8号,
- 然后调用add()方法在Calendar.Date字段上增加100,
- 从打印结果可以看出,增加100天的日期为2008年10月16日。
- */
- }
- }
- 实例二:
-
- import java.util.Calendar;
-
- public class Test_Calender {
-
- public static void main(String[] args) {
- Calendar calendar = Calendar.getInstance();// 获取表示当前时间的Calendar对象
- int year = calendar.get(Calendar.YEAR);// 获取当前年份
- int month = calendar.get(Calendar.MONTH)+1;// 获取当前月份
- int date = calendar.get(Calendar.DATE);// 获取当前日
- int hour = calendar.get(Calendar.HOUR);// 获取时
- int minute = calendar.get(Calendar.MINUTE);// 获取分
- int second = calendar.get(Calendar.SECOND);// 获取当前秒
- System.out.println("当前时间:"+year+"年"+month+"月"+date+"日"
- +hour+"时"+minute+"分"+second+"秒");
- /*
- 调用Calendar的getInstance()方法创建一个代表默认时区内当前时间的Calendar对象。
- 然后调用该对象的get(int field)方法,通过传入不同的常量字段值来分别得到日期、时间各个
- 字段的值,
- 特别需要注意的是,获取的Calendar.MONTH字段值需要加1才表示当前时间的月份。
- */
- }
-
- }
如果要将Date对象表示的日期以指定的格式输出,例如输出中文格式的时间,就需要用到DateFormat类。DateFormat类专门用于将日期格式化为字符串或者将用特定格式显示的日期字符串转换成一个Date对象。DateFormat是抽象类,不能被直接实例化,但它提供了静态方法,通过这些方法可以获取DateFormat类的实例对象,并调用其它相应的方法进行操作。
表中列出了DateFormat类的四个静态方法,这四个方法都是用于获得DateFormat类的实例对象,每种方法返回的对象都具有不同的作用,它们可以分别对日期或者时间部分进行格式化。在DateFormat类中定义了四个常量值用于作为参数传递给这些方法,其中包括FULL、LONG、MEDIUM和SHORT。FULL常量用于表示完整格式,LONG常量用于表示长格式,MEDIUM常量用于表示普通格式,SHORT常量用于表示短格式。
-
- public class Test_DateFormat {
-
- public static void main(String[] args) throws ParseException {
- Date date = new Date();
-
- // Full格式的日期格式器对象
- DateFormat fullFormat = DateFormat.getDateInstance(DateFormat.FULL);
-
- // Long格式的日期格式器对象
- DateFormat longFormat = DateFormat.getDateInstance(DateFormat.LONG);
-
- // MEDIUM格式的日期/时间格式器对象
- DateFormat mediumFormat = DateFormat.getDateTimeInstance(DateFormat.MEDIUM,DateFormat.MEDIUM);
-
- // SHORT格式的日期/时间格式器对象
- DateFormat shortFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT,DateFormat.SHORT);
-
- // 打印格式化的日期或者日期/时间
- System.out.println("当期日期的完整格式为:"+fullFormat.format(date));
- System.out.println("当期日期的长格式为:"+longFormat.format(date));
- System.out.println("当期日期的普通格式为:"+mediumFormat.format(date));
- System.out.println("当期日期的短格式为:"+shortFormat.format(date));
- /*
- 演示了四种格式下时间和日期格式化输出的效果,
- 其中调用getDateInstance()方法获得的实例对象用于对日期部分进行格式化,
- getDateTimeInstance()方法获得的实例对象可以对日期和时间部分进行格式化。
- */
-
- }
- }
DateFormat中还提供了一个parse(String source)方法,能够将一个字符串解析成Date对象,但是它要求字符串必须符合日期/时间的格式要求,否则会抛出异常。
- DateFormat df = DateFormat.getDateInstance(DateFormat.LONG);
- String str = "2021年11月28日";
- System.out.println(df.parse(str));
- /*
- 使用LONG样式常量创建了一个DateFormat对象,
- 然后调用format()方法与它格式对应的时间字符串"2021年11月28日"解析成了Date对象。
- */
JDK中提供了一个SimpleDateFormat类,该类是DateFormat类的子类。SimpleDateFormat类可以使用new关键字创建实例对象,它的构造方法接收一个格式字符串参数,表示日期格式模板。
- import java.sql.Date;
- import java.text.SimpleDateFormat;
-
- public class simpledateformat {
-
- @SuppressWarnings("deprecation")
- public static void main(String[] args) {
-
- // 创建一个SimpleDateFormat对象
- SimpleDateFormat sdf = new SimpleDateFormat(
- "Gyyyy年MM月dd日:今天是yyyy年的第D天,E");
-
- // 按SimpleDateFormat对象的日期模板格式化Date对象
- System.out.println(sdf.format(new Date(0, 0, 0)));
-
- }
- }
-
- public class Test_Switch {
-
- public static void main(String[] args) {
- String week = "Friday";
- switch(week){
- case "Monday":
- System.out.println("星期一");
- break;
- case "Tuesday":
- System.out.println("星期二");
- break;
- case "Wednesday":
- System.out.println("星期三");
- break;
- case "Thursday":
- System.out.println("星期四");
- break;
- case "Friday":
- System.out.println("星期五");
- break;
- case "Saturday":
- System.out.println("星期六");
- break;
- case "Sunday":
- System.out.println("星期天");
- break;
- default :
- System.out.println("输入有误!请重新输入:");
- break;
-
- }
- }
-
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。