引言

本节讨论java中提供的一些基础类,它们在各个细小的领域有这比较丰富的功能,虽然叫常用类,但是有些类并非经常使用。api在线文档
https://tool.oschina.net/apidocs/apidoc?api=jdk_7u4

一.Object类

java.lang下

1.常用方法

hashCode() : int
这个方法的作用是获得该对象的哈希码,hashcode折射出的是该对象的地址信息(并不是直接地址)
toString() : String
这个方法的作用是获得对象的字符串表达形式。默认实现的方案是 全类名+@+16进制的hashcode.
这个方法通常需要我们自己重写一下。
equals( Object other) : boolean
这个方法用于判断两个对象是否相等,默认比较的方式是 == 比较地址,如果需要比较属性,需要重写。
getClass: class
这个方法的作用是获得 对象类型信息,比如获得类名,属性信息,方法信息等。
finalize() void
这个方法的作用是,当对象被标记为垃圾时,回调的方法,一个对象的这个方法只会调用一次,对象被标记为垃圾后,进入回收队列
wait() notify() notifyAll()
线程等待 线程唤醒 方法
clone( ) : Object
复制一个对象的方法。通常一个对象要支持克隆需要实现一个 Cloneable 接口,否则引发 CloneNotSupportedException 。如果不实现这个接口,需要手动创建对象填充属性值。

二.String 类

String 类是一个常用基础类型,但是被设计为一个不可变字符串(Java.lan下)
属于引用数据类型 用equals 比较

char [**charAt**](../../java/lang/String.html#charAt(int))(int index)
返回指定索引处的 char
值。
int [**compareTo**](../../java/lang/String.html#compareTo(java.lang.String))([String](../../java/lang/String.html) anotherString)
按字典顺序比较两个字符串。
int [**compareToIgnoreCase**](../../java/lang/String.html#compareToIgnoreCase(java.lang.String))([String](../../java/lang/String.html) str)
按字典顺序比较两个字符串,不考虑大小写。
[String](../../java/lang/String.html) [**concat**](../../java/lang/String.html#concat(java.lang.String))([String](../../java/lang/String.html) str)
将指定字符串连接到此字符串的结尾。
boolean [**contains**](../../java/lang/String.html#contains(java.lang.CharSequence))([CharSequence](../../java/lang/CharSequence.html) s)
当且仅当此字符串包含指定的 char 值序列时,返回 true。
boolean [**endsWith**](../../java/lang/String.html#endsWith(java.lang.String))([String](../../java/lang/String.html) suffix)
测试此字符串是否以指定的后缀结束。
boolean [**equals**](../../java/lang/String.html#equals(java.lang.Object))([Object](../../java/lang/Object.html) anObject)
将此字符串与指定的对象比较。
boolean [**equalsIgnoreCase**](../../java/lang/String.html#equalsIgnoreCase(java.lang.String))([String](../../java/lang/String.html) anotherString)
将此 String
与另一个 String
比较,不考虑大小写。
int [**indexOf**](../../java/lang/String.html#indexOf(java.lang.String))([String](../../java/lang/String.html) str)
返回指定子字符串在此字符串中第一次出现处的索引。
int [**indexOf**](../../java/lang/String.html#indexOf(java.lang.String, int))([String](../../java/lang/String.html) str, int fromIndex)
返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。
[String](../../java/lang/String.html) [**intern**](../../java/lang/String.html#intern())()
返回字符串对象的规范化表示形式。
boolean [**isEmpty**](../../java/lang/String.html#isEmpty())()
当且仅当 [length()](../../java/lang/String.html#length())
为 0 时返回 true。
int [**lastIndexOf**](../../java/lang/String.html#lastIndexOf(java.lang.String))([String](../../java/lang/String.html) str)
返回指定子字符串在此字符串中最右边出现处的索引。
int [**lastIndexOf**](../../java/lang/String.html#lastIndexOf(java.lang.String, int))([String](../../java/lang/String.html) str, int fromIndex)
返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索。
int [**length**](../../java/lang/String.html#length())()
返回此字符串的长度。
boolean [**matches**](../../java/lang/String.html#matches(java.lang.String))([String](../../java/lang/String.html) regex)
告知此字符串是否匹配给定的正则表达式
[String](../../java/lang/String.html) [**replace**](../../java/lang/String.html#replace(java.lang.CharSequence, java.lang.CharSequence))([CharSequence](../../java/lang/CharSequence.html) target, [CharSequence](../../java/lang/CharSequence.html) replacement)
使用指定的字面值替换序列替换此字符串所有匹配字面值目标序列的子字符串。
[String](../../java/lang/String.html) [**replaceAll**](../../java/lang/String.html#replaceAll(java.lang.String, java.lang.String))([String](../../java/lang/String.html) regex, [String](../../java/lang/String.html) replacement)
使用给定的 replacement 替换此字符串所有匹配给定的正则表达式
的子字符串。
[String](../../java/lang/String.html) [**replaceFirst**](../../java/lang/String.html#replaceFirst(java.lang.String, java.lang.String))([String](../../java/lang/String.html) regex, [String](../../java/lang/String.html) replacement)
使用给定的 replacement 替换此字符串匹配给定的正则表达式
的第一个子字符串。
[String](../../java/lang/String.html)[] [**split**](../../java/lang/String.html#split(java.lang.String))([String](../../java/lang/String.html) regex)
根据给定正则表达式
的匹配拆分此字符串。
[String](../../java/lang/String.html)[] [**split**](../../java/lang/String.html#split(java.lang.String, int))([String](../../java/lang/String.html) regex, int limit)
根据匹配给定的正则表达式
来拆分此字符串。
boolean [**startsWith**](../../java/lang/String.html#startsWith(java.lang.String))([String](../../java/lang/String.html) prefix)
测试此字符串是否以指定的前缀开始。
boolean [**startsWith**](../../java/lang/String.html#startsWith(java.lang.String, int))([String](../../java/lang/String.html) prefix, int toffset)
测试此字符串从指定索引开始的子字符串是否以指定前缀开始。
[String](../../java/lang/String.html) [**substring**](../../java/lang/String.html#substring(int))(int beginIndex)
返回一个新的字符串,它是此字符串的一个子字符串。
[String](../../java/lang/String.html) [**substring**](../../java/lang/String.html#substring(int, int))(int beginIndex, int endIndex)
返回一个新字符串,它是此字符串的一个子字符串。
char[] [**toCharArray**](../../java/lang/String.html#toCharArray())()
将此字符串转换为一个新的字符数组。
[String](../../java/lang/String.html) [**toLowerCase**](../../java/lang/String.html#toLowerCase())()
使用默认语言环境的规则将此 String
中的所有字符都转换为小写。
[String](../../java/lang/String.html) [**toString**](../../java/lang/String.html#toString())()
返回此对象本身(它已经是一个字符串!)。
[String](../../java/lang/String.html) [**toUpperCase**](../../java/lang/String.html#toUpperCase())()
使用默认语言环境的规则将此 String
中的所有字符都转换为大写。
[String](../../java/lang/String.html) [**trim**](../../java/lang/String.html#trim())()

string是不可变的字符串。 string可以使用+号进行拼接 但是StingBuffer 只能用append添加 需要用toString() 方法来转字符串
和 String 类不同的是,StringBuffer(单线程) 和 StringBuilder(多线程) 类的对象能够被多次的修改,并且不产生新的未使用对象

StringBuffer 类(线程安全):

每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,所以如果需要对字符串进行修改推荐使用 StringBuffer。
1 StringBuffer append(String s) 将指定的字符串追加到此字符序列。
2 StringBuffer reverse() 将此字符序列用其反转形式取代。
3 delete(int start, int end)移除此序列的子字符串中的字符。
4 insert(int offset, int i)将 int 参数的字符串表示形式插入此序列中。
5 insert(int offset, String str)将 str 参数的字符串插入此序列中。
deleteAT(); 删除下标位置的指定字符;
replace(起始位置,终止位置,替换字符串)
1 int capacity()返回当前容量。
2 char charAt(int index) 返回此序列中指定索引处的 char 值。
3 void ensureCapacity(int minimumCapacity)
确保容量至少等于指定的最小值。
4 void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
将字符从此序列复制到目标字符数组 dst。
5 int indexOf(String str)
返回第一次出现的指定子字符串在该字符串中的索引。
6 int indexOf(String str, int fromIndex)
从指定的索引处开始,返回第一次出现的指定子字符串在该字符串中的索引。
7 int lastIndexOf(String str)
返回最右边出现的指定子字符串在此字符串中的索引。
8 int lastIndexOf(String str, int fromIndex)
返回 String 对象中子字符串最后出现的位置。

9 int length()
返回长度(字符数)。
10 void setCharAt(int index, char ch)
将给定索引处的字符设置为 ch。
11 void setLength(int newLength)
设置字符序列的长度。
12 CharSequence subSequence(int start, int end)
返回一个新的字符序列,该字符序列是此序列的子序列。
13 String substring(int start)
返回一个新的 String,它包含此字符序列当前所包含的字符子序列。
14 String substring(int start, int end)
返回一个新的 String,它包含此序列当前所包含的字符子序列。
15 String toString()
返回此序列中数据的字符串表示形式。

StringBuilder 类(快 线程不安全):

由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。

三.包装类

包装类(封装类) : 直接把基本数据类型表示成一个类,在执行数据类型转换时就会使用到包装类
基本类型 封装类型
byte Byte
char Character
int Integer
long Long
float Float
double Double
boolean Boolean
short Short
*/

装箱: 把一个基本数类型 变成引用 数据类型
拆箱: 把引用数据类型变成 基本数据类型

  1. public class WarpDemo {
  2. public static void main(String[] args) {
  3. // JDK.1.5以前 手动完成 装箱 和 拆箱
  4. // 装箱: 把一个基本数类型 变成引用 数据类型
  5. int num = 100; // 基本数据类型
  6. Integer numPlus = new Integer( num ); // 引用数据类型
  7. // 拆箱: 把引用数据类型变成 基本数据类型
  8. Integer nPlus = new Integer(100); //引用类型
  9. int n = nPlus.intValue(); // 基本数据类型
  10. }
  11. }

自动装箱与拆箱[jdk5+]

  1. public class WarpDemo {
  2. public static void main(String[] args) {
  3. //JDK 1.5+ 自动 装箱拆箱 , 使转换更容易。
  4. int x = 10;
  5. Integer xPlus = x; //自动装箱
  6. Integer yPlus = 100;
  7. int y = yPlus; //自动拆箱
  8. }
  9. }

3.4 包装类提供的方法

使用包装类,提供的静态方法完成一些简单功能。

  1. public class WarpApi {
  2. public static void main(String[] args) {
  3. // 1. 查看类型的 取值区间
  4. System.out.println( Integer.MIN_VALUE+ "-"+ Integer.MAX_VALUE );
  5. // 2. 转进制
  6. System.out.println(Integer.toBinaryString(10));
  7. System.out.println(Integer.toHexString(10));
  8. // 3. 比较大小
  9. System.out.println(Integer.max(10, 50));
  10. System.out.println(Integer.min(10, 50));
  11. System.out.println(Integer.compare(10, 3));
  12. }
  13. }

3.5 数值类型与字符串转换[掌握]

开发中很多时候,需要把字符串类型 转成 数值类型,比如需要把 String “99.8” 变成 double 99.8 。
字符串转数值类型,需要找到对应的包装类型,比如要转int 找Integer 转double就找Double。 包装类提供 parseByte() parseShort() parseInt() parseLong() parseFloat() parseDouble

  1. public class WarpApi {
  2. public static void main(String[] args) {
  3. System.out.println("------------------ String==> 数值 ----------------------");
  4. Scanner scanner = new Scanner(System.in);
  5. String price = scanner.next();
  6. double money = Double.parseDouble( price );
  7. double xx = money * 0.8;
  8. System.out.println(xx);
  9. System.out.println("------------------ 数值 ==> String ----------------------");
  10. double abc = 120.0;
  11. String s= String.valueOf(abc);
  12. System.out.println(s);
  13. }
  14. }

3.6 BigDecimal

由于java中浮点数计算不精确,可以使用BigDecimal解决问题,需要注意的是必须以字符串方式构造BigDecimal。
BigDecimal 提供了API来计算:

  1. add( BigDecimal other ):BigDecimal
  2. subtract( BigDecimal other ):BigDecimal
  3. multiply( BigDecimal other ):BigDecimal
  4. divide( BigDecimal other ,int scale , int rondModel ):BigDecimal

重点说明:
对于除法,因为存在无限循环小数,所以可能会引发异常,通过 参数 scale 控制小数点位数, rondModel控制取舍策略。
常用取舍策略:
ROUND_UP = 0
ROUND_DOWN =1
ROUND_CEILING =2
ROUND_FLOOR = 3
ROUND_HALF_UP = 4 四舍五入

  1. public class BigDecimalDemo {
  2. public static void main(String[] args) {
  3. double a = 1.0;
  4. double b = 0.9;
  5. System.out.println(a-b);//0.99999999998 不精确
  6. //包装
  7. BigDecimal n1 = new BigDecimal( String.valueOf(a) );
  8. BigDecimal n2 = new BigDecimal( String.valueOf(b) );
  9. System.out.println("-------加法------");
  10. BigDecimal result1 = n1.add(n2);
  11. System.out.println(result1.doubleValue());
  12. System.out.println("-------减法------");
  13. BigDecimal result2 = n1.subtract(n2);
  14. System.out.println(result2.doubleValue());
  15. System.out.println("-------乘法--------");
  16. BigDecimal result3 = n1.multiply(n2);
  17. System.out.println(result3.doubleValue());
  18. System.out.println("-------除法--------");
  19. BigDecimal result4 = n1.divide(n2,2,BigDecimal.ROUND_HALF_UP);
  20. System.out.println(result4.doubleValue());
  21. }
  22. }

3.7 BigInteger

当运算数据非常大的情况下,基本数据类型无法完成运算,比如两个long的最大值相加,没有办法直接运算,这时可以借助 BigInter包装类使用API运算,API与BigDecimal完全一致

  1. // 大数运算
  2. public class BigInteDemo {
  3. public static void main(String[] args) {
  4. long x1 = 9223372036854775807L;
  5. long x2 = 9223372036854775807L;
  6. BigInteger n1 = new BigInteger( String.valueOf(x1) );
  7. BigInteger n2 = new BigInteger( String.valueOf(x2) );
  8. BigInteger result = n1.add(n2);
  9. System.out.println(ru); //18446744073709551614
  10. }
  11. }

四.日期类

4.1 Date类

是用来描述时间的。一个时刻,一个瞬间都是 Date的实例。在java.util包中。
Date的常用方法:

  1. public class TestDateApi {
  2. public static void main(String[] args) {
  3. Date date = new Date();
  4. //1. 获得时间的毫秒数
  5. long time = date.getTime();
  6. System.out.println(time);
  7. //2. 日期比较 after before
  8. Date date2= new Date(1618191582373L);
  9. boolean after = date.before(date2);
  10. System.out.println(after);
  11. //3. 过期的方法
  12. System.out.println(date.getYear()+1900);
  13. System.out.println(date.getMonth()+1);
  14. System.out.println(date.getDate());
  15. }
  16. }

4.2 SimpleDateFormat 类[掌握]

创建对象:

  1. //SimpleDateFormat sdf = new SimpleDateFormat("包含格式符号的模板字符串");
  2. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

核心方法:

  1. public class TestSimpleDateFormat {
  2. public static void main(String[] args) {
  3. Date date = new Date();
  4. //格式化输出
  5. /**
  6. * 格式模板 yyyy-MM-dd hh:mm:ss
  7. * y:年 M:月 d:日 h:时 m:分 s:秒
  8. */
  9. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
  10. String strDate = sdf.format(date);
  11. System.out.println(strDate);
  12. }
  13. }

把一个字符串 转换成日期对象,往往用户输入的都是字符串,即便是一个时间也是以一个字符串输入的比如 2008-10-10,而程序中需要的是一个对象。

  1. Scanner scanner = new Scanner( System.in );
  2. System.out.println("输入生日");
  3. String birthdy = scanner.next(); // 2008-10-10
  4. SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd");
  5. Date parseDate = sdf2.parse(birthdy);
  6. System.out.println(parseDate);

4.3 Calander 类

日历类,Date 绝大部分api过期了,很多功能就需要借助 Calander 完成。日历除了当前时间以外,还存储了与此相关的其他信息(日历字段)和处理日期一些方法。位于java.util包


4.3.1创建对象:

  1. public class TestCalendar {
  2. public static void main(String[] args) {
  3. //获得实例
  4. Calendar calendar = Calendar.getInstance();
  5. }
  6. }

4.3.2 核心方法

  1. get( int field):int
  2. set( int field , int value )
  3. add( int field , int amount)
  4. getActualMaximum(int field)
  5. getActualMinimum(int field)

**

  1. package case1.calander;
  2. import java.util.Calendar;
  3. public class TestCalendar {
  4. public static void main(String[] args) {
  5. //获得实例
  6. Calendar calendar = Calendar.getInstance();
  7. // get(int x):int 获得日历字段
  8. int year = calendar.get(Calendar.YEAR);
  9. int month = calendar.get(Calendar.MONTH);
  10. int day = calendar.get(Calendar.DATE);
  11. int h = calendar.get(Calendar.HOUR);
  12. int m = calendar.get(Calendar.MINUTE);
  13. int s = calendar.get(Calendar.SECOND);
  14. System.out.println( year );
  15. System.out.println( month+1);
  16. System.out.println( day );
  17. System.out.println("------------------------------");
  18. System.out.println(calendar.get(Calendar.DAY_OF_YEAR));
  19. System.out.println(calendar.get(Calendar.DAY_OF_WEEK));
  20. // set( int field , int value ): 修改日历字段值
  21. // calendar.set( Calendar.YEAR , 2099);
  22. // add( int filed, int amont ): 增加日历字段值
  23. calendar.add(Calendar.MONTH,1);
  24. // 获得当月最大实际日历信息
  25. // int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
  26. // int minDay = calendar.getActualMinimum(Calendar.DAY_OF_MONTH);
  27. //System.out.println(maxDay+" "+minDay);
  28. }
  29. }

4.3.3 日历案例

  1. package case1.calander;
  2. import java.util.Calendar;
  3. import java.util.Map;
  4. //日历
  5. public class DisplayCalendar {
  6. public static void main(String[] args) {
  7. //获得日历
  8. Calendar calendar = Calendar.getInstance();
  9. calendar.set(2021,5,1);
  10. //输出日历头部
  11. String[] days = {"一","二","三","四","五","六","日"};
  12. for ( String day : days){
  13. System.out.print(day+"\t");
  14. }
  15. System.out.println();
  16. //输出日历身体
  17. int min = calendar.getActualMinimum(Calendar.DAY_OF_MONTH);
  18. int max = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
  19. int xq = calendar.get(Calendar.DAY_OF_WEEK);
  20. //输出首行空格
  21. for(int i=1; i<=xq-2;i++){
  22. System.out.print("\t");
  23. }
  24. // 输出全部号数
  25. for(int i=min; i<=max; i++){
  26. System.out.print(i+"\t");
  27. calendar.set(Calendar.DAY_OF_MONTH,i); //把日历指向这一天
  28. int x= calendar.get(Calendar.DAY_OF_WEEK) ; //如果这一天是星期天 则换行
  29. if (x==1){
  30. System.out.println();
  31. }
  32. }
  33. }
  34. }

五.其他类

5.1 Arrays

它是一个数组的工具类,提供很多数组操作的方法。核心方法:

  1. package case1.arrays;
  2. import java.util.Arrays;
  3. // 数组工具类
  4. public class TestArrays {
  5. public static void main(String[] args) {
  6. int[] arr = {45,29,16,5,20,23,22,9,4};
  7. // 1. toString(T[] arr) // 数组转字符串
  8. System.out.println( Arrays.toString(arr) );
  9. // 2. sort(T[] ) // 排序
  10. Arrays.sort(arr);
  11. System.out.println( Arrays.toString(arr));
  12. // 3. binarySearch(T[] T key) // 二分查找
  13. System.out.println(Arrays.binarySearch(arr, 20));
  14. // 4. copyOf(int[] arr , int len) // 数组拷贝
  15. int[] newArr = Arrays.copyOf(arr, 5);
  16. System.out.println(Arrays.toString(newArr));
  17. // 5. copyOfRange(T[] arr, int from, int to) // 数组区间拷贝
  18. int[] newArr2 = Arrays.copyOfRange(arr, 3, 7);
  19. System.out.println(Arrays.toString(newArr2));
  20. // 6. equals(T[] a1, T[] a2) // 两数组相等比较
  21. int[] xrr = {1,2,3};
  22. int[] yrr = {1,2,3,4};
  23. System.out.println(Arrays.equals(xrr, yrr));
  24. // 7 .fill(T[] arr , int value) // 数组元素填充
  25. int[] zrr = new int[10];
  26. Arrays.fill( zrr,2,5, -1 );
  27. System.out.println(Arrays.toString(zrr));
  28. }
  29. }

5.2 Random

这类是一个生成伪随机数类,底层原理使用 使用线性同余公式 ,生成的数字,如果种子相同,进行相同次数的调用得到的值是相同的。
nextInt( int n): int 生成一个0-N之间的整数
nextDouble() :double 生成一个浮点数
nextBoolean(): boolean 生成一个Boolean值

  1. public class TestRandom {
  2. public static void main(String[] args) {
  3. Random rd = new Random(100);// 100为随机数种子
  4. for (int i= 0; i<4; i++){
  5. int num = rd.nextInt(100);
  6. System.out.println(num);
  7. }
  8. }
  9. }

5.3 UUID

这个类用于生成 唯一字符串序列

  1. public class TestUUID {
  2. public static void main(String[] args) {
  3. //获得一个随机的UUID
  4. UUID uuid = UUID.randomUUID();
  5. //获得UUID字符串
  6. String uuidStr = uuid.toString();
  7. //替换 -
  8. uuidStr = uuidStr.replace("-","");
  9. System.out.println(uuidStr);
  10. }
  11. }

5.4 Math

它是一个数学工具类,提供了数学计算上的一些方法。全部是静态方法

  1. public class TestMath {
  2. public static void main(String[] args) {
  3. System.out.println(Math.PI); // 获得 PI
  4. System.out.println(Math.abs(-100)); // 计算绝对值
  5. System.out.println(Math.pow(2, 11));// 计算次方
  6. System.out.println( (int)(Math.random()*10) ); // 随机数0.0-1.0间
  7. System.out.println(Math.round(3.7)); // 四舍五入
  8. System.out.println(Math.floor(3.9)); // 向下取整
  9. System.out.println(Math.ceil(3.1)); // 向上取整
  10. System.out.println(Math.sqrt(81)); // 开平方根
  11. }
  12. }

5.5 Runtime

它的对象表示运行环境的对象,通过这个对象可以获得,运行平台的相关信息。

  1. public class TestRuntime {
  2. public static void main(String[] args) throws IOException {
  3. //获得实例
  4. Runtime runtime = Runtime.getRuntime();
  5. //获得运行环境信息
  6. int n = runtime.availableProcessors(); // 获得处理器个数的
  7. System.out.println(n);
  8. //runtime.exec("C:/Program Files (x86)/Tencent/QQLive/QQLive.exe"); //打开一些软件
  9. //runtime.exit(0); //立即退出
  10. long freeMemory = runtime.freeMemory();
  11. System.out.println(freeMemory/1024/1024); // 返回 Java 虚拟机中的空闲内存量。
  12. long maxMemory = runtime.maxMemory(); // 返回 Java 虚拟机试图使用的最大内存量。
  13. System.out.println(maxMemory/1024/1024);
  14. long totalMemory = runtime.totalMemory(); // 返回 Java 虚拟机中的内存总量。
  15. System.out.println(totalMemory/1024/1024);
  16. System.out.println("over");
  17. }
  18. }

5.6 System

System 类包含一些有用的类字段和方法。它不能被实例化。
System 类提供的设施中,有标准输入、标准输出和错误输出流;对外部定义的属性和环境变量的访问;加载文件和库的方法;还有快速复制数组的一部分的实用方法。

  1. public class TestSystem {
  2. public static void main(String[] args) {
  3. // 输入流
  4. Scanner sc = new Scanner( System.in );
  5. //输出流
  6. System.out.println( "hello");
  7. //错误,打印错误信息
  8. System.err.println("world");
  9. // 读取环境变量
  10. Map<String, String> info = System.getenv();
  11. System.out.println(info.get("KEY"));
  12. }
  13. }

课后习题:

生成随机的字符串

  1. class Str1{
  2. public static String getRandomString(int length) {
  3. String str = "abcdefghigklmnopqrstuvwxyzABCDEFGHIGKLMNOPQRSTUVWXYZ1234567890";
  4. Random random = new Random();
  5. StringBuffer sb = new StringBuffer();
  6. for (int i = 0; i < length; i++) {
  7. // 从1-62的字符中随机取出一位
  8. int number = random.nextInt(62);
  9. sb.append(str.charAt(number));
  10. }
  11. return sb.toString();
  12. }
  13. }

找到子字符串在字符串中出现的位置

  1. class str3{
  2. public void m1(){
  3. Scanner sc = new Scanner(System.in);
  4. System.out.print("请输入一个字符串:");
  5. String str = sc.next();
  6. System.out.print("请输入一个子串:");
  7. String st = sc.next();
  8. int index=0;
  9. while(true){
  10. int i = str.indexOf(st,index);
  11. if (i==-1){
  12. break;
  13. }
  14. System.out.println("出现的位置是:"+i);
  15. index+=i+st.length();
  16. }
  17. }
  18. }

统计数字出现的次数:

  1. class num {
  2. public void getcount(){
  3. Scanner sc = new Scanner(System.in);
  4. System.out.print("请输入一个字符串(整数):");
  5. String str = sc.next();
  6. char[] arr = str.toCharArray();
  7. int[] counter = new int[10];
  8. for (int i = 48; i <58 ; i++) {
  9. int count=0;
  10. for (int j = 0; j <arr.length ; j++) {
  11. if (arr[j]==i)count++;
  12. }
  13. counter[i-48]=count;
  14. }
  15. for (int i = 0; i <counter.length ; i++) {
  16. System.out.println(i+"出现的次数为:"+counter[i]);
  17. }
  18. }
  19. }

统计每个字符出现的字数

  1. class zifu{
  2. public void getZifu(){
  3. Scanner sc = new Scanner(System.in);
  4. System.out.print("请输入一个字符串:");
  5. String str = sc.next();
  6. char[] arr = str.toCharArray();
  7. char[] c = new char[57];
  8. for (char i = 65; i < 123; i++) {
  9. int count=0;
  10. for (int j = 0; j <arr.length ; j++) {
  11. if(arr[j]==i)count++;
  12. }
  13. if(count!=0)System.out.println(i+"出现的次数为:"+count);
  14. }
  15. }
  16. }