其他分享
首页 > 其他分享> > 千锋逆战班day22

千锋逆战班day22

作者:互联网

在千锋逆战学习第22天
越努力越幸运

Day 22
2、可变字符串
StringBuilder:可变字符串,JDK5.0提供,运行效率块、线程不安全

public class TestStringBuilder {

	public static void main(String[] args) {
		System.out.println("abc");//字符串即是被final修饰的字符数组
		char[] chs={'H','e'};
		new String(chs);//保证String的不变特性
		
		String s1="abc";//被final修饰,地址不变;其中元素,String类从不做改变;"abc"-->new char[]{'a','b','c'}
		String s2=s1+"def";//理论(拷贝一份s1所代表的字符串的具体值'a','b','c',再创建一个'd','e','f')		                  
	}
}

public class TestStringBuilder2 {

	public static void main(String[] args) {
		String str="Hello";//不变的,不可扩容、加长
		
		StringBuilder sBuilder=new StringBuilder(str);//内存中创建一个对象(Hello),可变的,可扩容,可加长
		for(int i=1;i<=100;i++){
			sBuilder.append(i);//在原有空间中进行追加,容量不够,则扩容
		}
		str=sBuilder.toString();		
		System.out.println(str);
	}
}

public class TestStringBuilder3 {

	public static void main(String[] args) {
		String str="world";
		
		for(int i=0;i<=100;i++){
			str+=i;//编译之后,自动创建StringBuilder对象、初始化、调用append方法进行追加、调用toString转换成字符串,
			       // 并赋值给str
		}
		System.out.println(str);
	}
}

public class TestStringBuilder4 {

	public static void main(String[] args) {
		String s1="abc";//1、直接声明&&2、首次出现(保存在池中)
		String s2=s1+"def";//自动优化,StringBuilder.toString()得到的一个new String(xxx,xxx,xxx)堆
		s2.intern();//只要满足首次出现即可,手工的在运行程序时,将s2加到池中
		String s3="abcdef";//直接声明保存在池中(不需要优化)
		
		System.out.println(s2==s3);//false				
	}
}
public class TestString5 {

	public static void main(String[] args) {
		String s1="abc";//1、直接声明&&2、首次出现(保存在池中)
		String s2=s1+"def";//自动优化,StringBuilder.toString()得到的一个new String(xxx,xxx,xxx)堆
		//s2.intern();
		String s3="abcdef";////1、直接声明&&2、首次出现(保存在池中)
		s2.intern();//手工向池中保存s2指定字符串失败
		System.out.println(s2==s3);//false 比较s2指向堆中的"abcdef"  s3所指向的池中的"abvdef"
		
		String s4=s2.intern();//指向池中,不变(如果池中已有s2所指向的"abcdef"的话,则返回池中的内容一样的常量地址)
		String s5=s2;//指向堆中,可变
		
		System.out.println(s4==s3);//true					
	}
}

3、常用方法

package com.qf.day22.t1.methods;

import java.util.Scanner;//快速导包Ctrl+1

public class TestStringMethods {

	public static void main(String[] args) {
		String s="HelloWorld";
		char c=s.charAt(0);
		System.out.println(c);
		
		//Scanner input=new Scanner(System.in);
		
		boolean b=s.contains("llo");//是否包含
		System.out.println(b);
		
		char[] chs=s.toCharArray();
		for(int i=0;i<chs.length;i++){
			System.out.print(chs[i]);
		}
		System.out.println();
		
		int i1=s.indexOf("ell");//返回首个字符的下标
		System.out.println(i1);
		
		//最简单的邮箱验证  @  .
		String email="liyifeng@163.com";
		int a1=email.indexOf("@");
		int a2=email.indexOf(".");
		if(a1!=-1&&a2!=-1){
			if(a1<a2){
				System.out.println("邮箱名正确");
			}
		}
		
		int i2=s.lastIndexOf("ll");//返回最后一个出现该字符的下标
		System.out.println(i2);
		
		System.out.println(s.length());
		
		System.out.println(s.isEmpty());//判断字符串是否为空串"",null没有对象
		
		String str="    hello   world    ";
		String str2=str.trim();//去掉开头和结尾的空格
		System.out.println(str2);
		
		String uppers=s.toUpperCase();//全变大写
		String lowers=s.toLowerCase();//全变小写
		System.out.println(uppers);
		System.out.println(lowers);
		
		System.out.println(uppers.equals(lowers));//false  内容必须完全相同,包括大小写
		System.out.println(uppers.equalsIgnoreCase(lowers));//true   忽略大小写,只比较内容
		
		String fileName="TestStringMethods.java";
		System.out.println(fileName.endsWith(".java"));//是不是以某个字符串为结尾
		System.out.println(fileName.startsWith("Test"));//是不是以某个字符串为开头
		
		String str4=s.replace('o','0');
		System.out.println(str4);
		
		String str5=s.replace("Hello", "GoodBye");
		System.out.println(str5);
		
		String text="人生就像一场戏,因为有缘才相聚,相扶到老不容易,是否应该更珍惜";
		String[] texts=text.split(",");
		for(int i=0;i<texts.length;i++){
			System.out.println(texts[i]);
		}
		
		String subStr=text.substring(8,15);
		System.out.println(subStr);
		
	}
}


4、BigDecimal

package com.qf.day22.t2.decmal;

import java.math.BigDecimal;

public class TestBigDecimal {

	public static void main(String[] args) {
		double d1=100.0;
		double d2=99.0+1.0;
		System.out.println(d1==d2);
		System.out.println(d2);
		
		double d3=1.0;
		double d4=2.2-1.2;
		System.out.println(d3==d4);
		System.out.println(d4);
		
		BigDecimal bd1=new BigDecimal("2.2");
		BigDecimal bd2=new BigDecimal("1.2");
		System.out.println(bd1);
		
		BigDecimal bd3=bd1.subtract(bd2);
		BigDecimal bd4=bd1.add(bd2);
		BigDecimal bd5=bd1.multiply(bd2);
		BigDecimal bd6=bd1.divide(bd2,3,BigDecimal.ROUND_HALF_DOWN);//除不尽的情况下,必须明确两个信息(保留几位小数位、是否使用四舍五入)
		
		System.out.println(bd3);
		System.out.println(bd4);
		System.out.println(bd5);
		System.out.println(bd6);
		
		System.out.println(bd3.getClass().getName()+"@"+Integer.toHexString(bd4.hashCode()));
	}
}



Chapter 09 内部类、Object、包装类、String
Key Point:
●Object类
●finalize类
●toString类
●equals类
●getClass类
●包装类
●三种类型(原始类型、包装类、字符串)与6种转换
●串池
习题:
1、(Object类)在Object类中,定义的finalize方法在当对象被判定为垃圾对象时时调用,toString()方法返回值表示该对象的字符串,equals方法的作用是 比较两个对象地址是否相同,getClass 方法作用是返回引用中存储的实际对象类型
2、(toString方法)写出下面代码的运行结果
class Student{
private int age;
private String name;
public Student(){}
public Student( String name,int age) {
super();
this.age = age;
this.name = name;
}
public String toString(){
return name+" "+age;
}
}
public class TestStudent {
public static void main(String[] args) {
Student stu1=new Student();
Student stu2=new Student(“Tom”,18);
System.out.println(stu1);
System.out.println(stu2);
}
}
null 0
Tom 18

3、(equals)写出下面程序的运行结果
public class TestEquals {
public static void main(String[] args) {
String str1=new String(“Hello”);
String str2=new String(“Hello”);
System.out.println(str1.equals(str2));
System.out.println(str1==str2);
}
}
true
false
4、(getClass)写出下面程序的运行结果
class Animal{}
class Dog extends Animal{}
public class TestGetClass {
public static void main(String[] args) {
Animal a1=new Dog();
Animal a2=new Animal();
System.out.println(a1 instanceof Animal);
System.out.println(a1.getClass()==a2.getClass());
}
}
true
false

5、(内部类)java中的内部类包括 ABCD
A.成员内部类
B.静态内部类
C.局部内部类
D.匿名内部类
E.公开内部类
F.抽象内部类

6.为Worker类增加equals和toString方法
package t6;

public class TestWorker {

public static void main(String[] args) {
	Worker[] worker=new Worker[]{
		new Worker("tom",30,"male",4000.0),
		new Worker("tom",30,"male",4000.0)
	};
	System.out.println(worker[0].equals(worker[1]));
	System.out.println(worker[0]);

}

}
class Worker{
String name;
int age;
String sex;
double salary;
public Worker(String name, int age, String sex, double salary) {
super();
this.name = name;
this.age = age;
this.sex = sex;
this.salary = salary;
}

public String toString() {
	return "Worker [name=" + name + ", age=" + age + ", sex=" + sex + ", salary=" + salary + "]";
}

@Override
public boolean equals(Object obj) {
	if(this==obj){
		return true;
	}
	if(obj==null){
		return false;
	}
	if(this.getClass()!=obj.getClass()){
		return false;
	}
	Worker worker=(Worker)obj;
	if(this.name.equals(worker.name)&&this.age==worker.age&&this.sex.equals(worker.sex)&&this.salary==worker.salary){
		return true;
	}
	return false;
}

}
7、从命令行上读入一个字符串,用两种不同的方法,把该字符串转换为一个int类型
方法一:把String直接转换为int
方法二:把String转换为Integer,再把Integer转换为int类型
8、(toString,字符串加法)有以下代码:
class Student{
private int age;
private String name;
public Student(){}
public Student(int age, String name) {
super();
this.age = age;
this.name = name;
}
public String toString(){
return name+" “+age;
}
}
public class TestStudent {
public static void main(String[] args) {
Student stu1=new Student(18,“tom”);
System.out.println(/1/);
}
}
问:在/1/位置填入什么代码能编译通过?ABC
A.stu1+” “+100
B.100+” “+stu1
C.” “+100+stu1
D.stu1+100+” "

9、(局部内部类)有下列代码:
class OuterClass{
private int value1=100;
private static int value2=200;
public void method(int values3){
final int value4=400;
class InnerClass{
public void print(){
//1
}
}
}
}
问:下列哪些代码能做//1处编译通过?ACD
A.System.out.println(value1);
B.System.out.println(value2);
C.System.out.println(value3);
D.System.out.println(value4);
10、已知接口Light定义如下:
interface Light{
void shine();
}
//定义Lamp类:
class Lamp{
public void on(Light light){
light.shine();
}
}
//写一个类TestLamp,部分代码如下:
public class TestLamp {
public static void main(String[] args) {
Lamp lamp=new Lamp();
//1
//2
}
}
把TestLamp类补充完整,要求:
1)在//1处使用局部内部类技术,调用lamp的on方法要求输出“shine in red”
2)在//2处使用匿名内部类技术,调用lamp的on方法要求输出“shine in yellow”

//1
class RedLight implements Light{
public void shine(){
System.out.println(“shine in red”);
}
}
lamp.on(new RedLight());
//2
lamp.on(new Light(){
public void shine(){
System.out.println(“shine in yellow”);
}
});
11、获取邮箱 “zhengcg@zparkhr.com”中的用户名 “zhengcg”。
public class TestEmail {
public static void main(String[] args) {
String email=“zhengcg@zparkhr.com”;
String name=email.substring(0,email.indexOf("@"));
System.out.println(name);

}

}
12、验证邮箱“zhengcg@zparkhr.com”是否是一个合格的邮箱格式
提示:
邮箱必须包含 “@”和 “ .”
最后一个 “.”的位置必须大于 “@”的位置
public class TestEmail {
public static void main(String[] args) {
String email=“zhengcg@zparkhr.com”;
int a1=email.indexOf("@");
int a2=email.indexOf(".");
if(a1!=-1&&a2!=-1){
if(a1<a2){
System.out.println(“邮箱“zhengcg@zparkhr.com”是一个合格的邮箱格式”);
}
}
}
}
13、将随机获取的UUID(含义是通用唯一识别码Universally Unique Identifier)中的“-” 去掉
提示:java.util.UUID.randomUUID().toString() //可以获取随机UUID
格式:e6c57443-1667-4d75-98f6-a8863d95e58f
public class TestUUID {
public static void main(String[] args) {
String uuid=java.util.UUID.randomUUID().toString();
String[] id=uuid.split("-");
for(int i=0;i<id.length;i++){
System.out.println(id[i]);
}
}
}

14、在给定的字符串 “ABCDEFGhijklmn1234567”中获取随机的4个字符,并使用StringBuilder拼接字符串。(随机获取到的4个字符中可以出现重复字符)
提示:创建随机数对象java.util.Random
java.util.Random random=new java.util.Random();
random.nextInt(100); //可以获取到0~99中任意一个随机数
public class TestString {
public static void main(String[] args) {
String s=“ABCDEFGhijklmn1234567”;
java.util.Random random=new java.util.Random();
StringBuilder sBuilder=new StringBuilder(s);
for(int i=1;i<=100;i++){
sBuilder.append(i);
}
System.out.println(sBuilder);
}
}
15、给定一个由数字组成的字符串
如:“12395868389231273478943890234092”;统计出每个数字出现的次数
public class TestNum {
public static void main(String[] args) {
String num=“12395868389231273478943890234092”;
count(num);
}
public static void count(String str){
int[] num=new int[str.length()];
int[] count=new int[10];
int a;
for(int i=0;i<num.length;i++){ num[i]=Integer.parseInt(Character.toString(str.charAt(i)));
}
for(int i=0;i<str.length();i++){
a=num[i];
count[a]++;
}
for(int i=0;i<str.length();i++){
System.out.println(i+“出现了”+count[i]+“次”);
}
}
}

标签:千锋,String,int,System,day22,逆战班,println,public,out
来源: https://blog.csdn.net/Y_L_Lee/article/details/104629618