• 012.day12


    常用API的使用

    1.数字与字符串的转换

    // TODO 数字与字符串的转换
    		Scanner scanner = new Scanner(System.in);
    		// 输入一个字符类型的数字
    		String s = scanner.nextLine();
    		// 字符串数据转换为数字(整数和小数)类型
    		Integer a1 = Integer.parseInt(s);// 这里返回的是int类型与integer.valueOf返回的integer不同
    		Double d1 = Double.parseDouble(s);
    		System.out.println(a1 + " " + d1);
    		// 将string数字转换成integer
    		Integer a2 = Integer.valueOf(s);
    		System.out.println(a2);
    		// 数字转为字符串
    		Integer a = 10;
    		// 1.加号拼接空字符串(StringBuilder的append方法)
    		String aString = a + " ";
    		// 2.String.valueOf()方法
    		Integer b = 10;
    		System.out.println(String.valueOf(a) + 10);// string类与integer都有valueOf方法
    	}
    

    2.包装类的常用属性

    		// 各包装类占用的二进制位	xxx.size
    		System.out.println(Character.SIZE); //16
    		System.out.println(Integer.SIZE);//32
    		System.out.println(Float.SIZE);//32
    		// 个包装类占用的字节数	xxx.butes
    		System.out.println(Character.BYTES);//2
    		System.out.println(Integer.BYTES);//4
    		System.out.println(Float.BYTES);//4
    		// 存储数据的上限	xxx.max_value
    		System.out.println((int) Character.MAX_VALUE);//65535
    		// 存储数据的下限	xxx.min_value
    		System.out.println((int) Character.MIN_VALUE);//0
    		System.out.println(Byte.MAX_VALUE);//
    		System.out.println(Byte.MIN_VALUE);
    

    3.包装类常用属性

    		Integer a = 10;
    		Integer b1 = 10;
    		Integer b = new Integer(10);
    		// 静态方法 compare
    		// 比较两个基本类型值的大小	a大于b返回值为1;小于为-1;等于为0
    		System.out.println(Integer.compare(a, b1)); //0
    		// 同时也可以用来比较两个Boolean类型值 相同为0 不同为1
    		boolean c = true;
    		boolean d = false;
    		System.out.println(Boolean.compare(c, d)); //1
    		
    		// compareTo方法,底层调用compare方法->通过三目运算符比较
    		System.out.println(a.compareTo(b)); //0
    		System.out.println(a == b); //false 非new生成的Integer变量指向的是java常量池中的对象而
    							//newInteger()生成的变量指向堆中新建的对象,两者在内存中的地址不同
    		// 拆箱时返回的是纯数据
    		System.out.println(a.intValue() == b.intValue());// true
    		System.out.println(Integer.compare(a, b));// 0
    		// 静态方法	xxx.max 底层调用Math类中max,min方法
    		Integer.max(a, b);// 返回较大的数字的值
    		Integer.min(a, b);// 放回较小的数字的值
    		// 返回由八进制的参数(基数8)表示的无符号整型值的字符串表示形式
    		System.out.println(Integer.toOctalString(10)); //12
    		String string = Integer.toOctalString(10);//底层调用的是toUnsignedString0,将结果以字符串												//的形式返回
    		
    

    4.字符串

    1)string,stringBuffer,stringBuilder

    		// TODO 字符串类型的比较,String字符数组,StringBuffer,StringBuilder效率比较
    		// 字符串常量:字符串数据是常量,存储在常量池中,常量池中不允许存储相同的数据,字符串可以直接将			数据赋值给对象引用.
    		// 起始时间
    		Long start = System.currentTimeMillis();//记录开始时间
    		for (int i = 0; i < 100000; i++) {
    			String a = "1";
    			String b = "23";
    			String c = a + b;
    		}
    		// 结束时间
    		Long end = System.currentTimeMillis();//记录结束时间
    		System.out.println("String操作了" + (end - start) + "毫秒");//String操作了29毫秒
    		// 字符串缓冲区:使用缓冲区操作字符串要比直接操作字符串效率高
    		// StringBuffer(String str)构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容
    		// StringBuffer()构造一个其中不带字符的字符串缓冲区,其初始容量为 16 个字符
    		// StringBuffer是个字符串的缓冲区,即就是它是一个容器,容器中可以装很多字符串。并且能够对其中的字符串进行各种操作。
    		start = System.currentTimeMillis();
    		// 构造一个字符串缓冲区a1,并将其内容初始化为指定的字符串内容
    		StringBuffer a1 = new StringBuffer("1");
    		for (int i = 0; i < 100000; i++) {
    			// stringBuffer.append方法
    			// 将指定字符串追加到a1
    			a1.append("23");
    		}
    		end = System.currentTimeMillis();
    		System.out.println("StringBuffer操作了" + (end - start) + "毫秒");
    		start = System.currentTimeMillis();
    		StringBuilder a2 = new StringBuilder("1");//StringBuffer操作了4毫秒
    		for (int i = 0; i < 100000; i++) {
    			a2.append("23");
    		}
    		end = System.currentTimeMillis();
    		System.out.println("StringBuilder操作了" + (end - start) + "毫秒");//StringBuilder操作了2毫秒
    		// 总结:速度由慢到快 string stringBuffer stringBuilder
    		// string与其他两者比 是因为后两者使用了字符串缓冲区,使用缓冲区操作字符串要比直接操作字符串效率高
    		// stringBuffer与stringBuilder比 是因为前者比后者线程安全,线程越安全效率越低
    
    

    2)字符串与+号

    		// string中字符串是存在常量池中;它们的值在创建之后不能更改,这是什么意思呢?其实就是说一旦这个字符串确定了,那么就会在内存区域中就生成了这个字符串。字符串本身不能改变,但str变量中记录的地址值是可以改变的。
    		// 变量初始化赋值时,常量池中已经存在相应的数据,则不会重新分配地址
    		String s1 = "1";
    		String s2 = "2";
    		String s3 = "12";
    		String s4 = "12";
    		String s5 = new String("12");
    		// +号直接把两个字符串放在一起,但是地址不会是一样的
    		System.out.println(s3 == (s1 + s2));// false
    		// 加号运算符两端都是字符常量时,编译时已经优化直接得到字符串
    		System.out.println(s3 == ("1" + "2"));// true
    		// 加号左右两端出现一个变量时,会发生append操作,此时比较不相等
    		System.out.println(s3 == ("1" + s2));// false
    		System.out.println(s3 == s4);// true
    		// 手动开辟空间时,等号判断不相等
    		System.out.println(s4 == s5);// false
    

    3)String构造方法

    		// 1.new String("xxx")
    		// 2.new String(Byte[] bytes,String charsetName)
    		String a = "123中89文56";
    		// 转换成字符数组->逐个字符判断
    		char[] characters = a.toCharArray();
    		int count = 0;
    		// 判断该字符占用的字节数,一个中文占两个字节,一个字节等于二进制8位
    		for (int i = 0; i < characters.length; i++) {
    			// 将字符转成二进制表示Integer.toBinaryString,返回这个字符以字符串形式二进制表示
    			String temp = Integer.toBinaryString(characters[i]);
    			System.out.println(temp);
    			// 判断字符占用字节数 > 大于1字节 -> 二进制位数除以8
    			if (temp.length() / 8 == 1) {
    				count++;
    			}
    		}
    		System.out.println("共有" + count + "个中文字符");
    

    4)获取字符串中某个位置的字符

    		String s = "123123121";
    		// 输入字符串下标位置,返回这个字符本身
    		System.out.println(s.charAt(0));
    		// 输入字符串下标位置,返回这个字符在编码表中的位置
    		System.out.println(s.codePointAt(0));
    		// 输入一个字符,返回这个字符第一次出现的索引
    		System.out.println(s.indexOf('1'));
    		// 输入一个字符串,把它当作一个整体,返回这个字符串第一次出现的位置
    		System.out.println(s.indexOf("23"));
    		// 输入一个字符和从第几个位置开始查找,返回这个字符第一次出现的索引
    		System.out.println(s.indexOf('2', 2));
    
    • 小练习查找字符串中出现某一个字符的所有位置

      public static void find(String string,String string1) {
      		Integer index = 0;
      		// 如果返回值为-1则没有这个字符,跳出循环
      		while (index != -1) {
      			// 最开始从0索引开始查找
      			index = string1.indexOf(string, index);
      			// 如果找到这个字符则输出索引,索引+1以便从下一个位置开始查找
      			if (index != -1) {
      				System.out.println(index);
      				index++;
      			} else {
      				System.out.println("查找结束");
      			}
      
      		}
      	}
      

    5)字符串比较

    // 可以用于时间的比较(日期格式统一)->年月日时分秒
    		String s1 = "2018-10-20 10:23:58";
    		String s2 = "2018-10-20 09:06:25";
    		// 返回正数时:代表前面的值较大(字符串长度超过后面的字符串长度)
    		// 返回负数时:代表后面的值较大(字符串长度小于后面的字符串长度)
    		// 单个字符比较时(做差运算),根据字符字典顺序(自然序列)
    		System.out.println(s1.compareTo(s2) > 0 ? s1 : s2);//2018-10-20 10:23:58
    

    6)字符串的分割-截取

    		String s = "123-812254";
    		// 返回一个string数组
    		String[] result = s.split("-");
    		for (String string : result) {
    			System.out.println(string);
    		}
    		// 分割句子,得到每一个单词
    		String s1 = "good good study,day day up";
    		// s1.split(",") -> 将字符串以逗号分割,得到两个子句
    		// sentence -> 每次循环取出的数组中的元素(分割得到的子句)
    		String[] sentences = s1.split(",");
    		for (String sentence : s1.split(",")) {
    			// sentence.split(" ") -> 对于每个句子再次通过空格分割
    			String[] words = sentence.split(" ");
    			for (String word : sentence.split(" ")) {
    				// word -> 循环取出分割后得到的单词
    				System.out.println(word);
    			}
    		}
    

    7)字符串的截取 左闭右开

    		String s = "125/65553/2";
    		// 参数1:开始位置;参数2:结束位置,做差:截取的字符数量
    		// 截取第一个字符
    		System.out.println(s.substring(0,1));
    		// 截取最后一个字符
    		System.out.println(s.substring(s.length() - 1,s.length()));
    		System.out.println(s.substring(1,2));
    		// 使用indexOf和lastIndexOf获取到的是字符索引
    		int start = s.indexOf("/");
    		System.out.println(start);
    		int end = s.lastIndexOf("/");
    		System.out.println(end);
    		// 当需要截取两个字符间的字符串时,需要将起始索引加1
    		System.out.println(s.substring(start + 1,end));
    

    8)字符串替换

    		String s = "  5  ";
    		// trim->将字符串首尾出现的空格替换为空字符串
    		// 从左至右删除所有空格字符,从右至左删除所有空格字符
    		System.out.println(s.trim().length());
    		// ""空字符串,null - > 对象为空
    		System.out.println(s.replace(" ", ""));
    		// replace()和replaceAll()都是替换所有匹配的字符
    		// replaceAll()支持正则表达式的写法
    

    9)字符串为空的判断

    		String s = "";
    		// 字符串长度为0,返回true
    		System.out.println(s.isEmpty());
    		// 字符串的前缀和后缀  
    		String a = "IT programmer";
    		// string.startsWith返回布尔类型,是否以某个字符串开头
    		System.out.println(a.startsWith("IR"));
    		// string.endsWith返回布尔类型,是否以某个字符串结尾
    		System.out.println(a.endsWith("mmer"));
    

    10)字符串格式转换

    		float w = 500f;
    		int q = 10;
    		// 格式化输出
    		// 使用百分号和字母代表不同的格式,可以比较方便的格式化小数的有效数字位数
    		// format方法为字符串的静态方法,可以将变量(Object)的值按照指定的格式进行格式化,返回字符串
    		System.out.println(String.format("小数:%f 整数:%d", w, q));
    

    11)字符串拼接

    		//string.concat将指定字符串连接到此字符串的结尾
    		String s = "123";// 3
    		System.out.println(s.concat("456"));// 6
    		System.out.println(s);
    		String s1 = "465".concat("13");
    		System.out.println(s1);
    		// System.out.println(s.equals("123")); 不这样写的原因是避免空指针异常
    		System.out.println("123".equals(s));
    

    5.integer的“==”复习

    		Integer integer1 = 10;
    		int integer2= 10;
    		Integer integer3 = Integer.valueOf(10);// 当超过范围就会new一个integer否则存在IntegerCache缓存中
    		Integer integer4 = new Integer(10);		   //10		210
    		System.out.println(integer1 == integer2);// true	true
    		System.out.println(integer1 == integer3);// true	false //这里不同是因为超过了范围new了一个Integer
    		System.out.println(integer1 == integer4);// false	false
    		System.out.println(integer2 == integer3);// true	true
    		System.out.println(integer2 == integer4);// true	true
    		System.out.println(integer3 == integer4);// false	false
    
  • 相关阅读:
    搬运好文章->>>>>子网划分详解
    搬运好文章->>>>>子网掩码详解
    搬运好文章->>>>>IP地址和MAC地址详解
    搬运好文章->>>>>计算机中进制之间的关系和转换
    extend 与 append 的区别
    数据类型---字符串
    多引号的作用,字符串格式化
    列表复制的几种方法
    十六进制和二进制转换
    python奇偶数求和
  • 原文地址:https://www.cnblogs.com/yokii/p/9381462.html
Copyright © 2020-2023  润新知