千锋逆战班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