java-05String课堂练习
1.阅读以下代码查看输出结果
public class StringPool {
public static void main(String args[])
{
String s0="Hello";
String s1="Hello";
String s2="He"+"llo";
System.out.println(s0==s1);//true
System.out.println(s0==s2);//true
System.out.println(new String("Hello")==new String("Hello"));//false
}
}

分析:在java中,相同的字符串只保存了一份,这是为了节约内存。也就是说s0、s1、s2地址相同,引用了同一对象。而程序最后一行的new新开辟了存储空间,同之前的字符串是不同的对象。所以输出为false。
若改为
public class StringPool {
public static void main(String args[])
{
String s1="a";
String s2=s1;
System.out.println(s1==s2);//true
s1+="b";
System.out.println(s1==s2);//false
System.out.println(s1=="ab");
System.out.println(s1.equals("ab"));
}
}

分析:先给字符串变量s1赋值为a字符串,然后将s1的值赋值给s2.此时它们引用的是同一个地址,所以它们是相等的。之后s1的值变成了a字符串和b字符串相连接,即得到了一个新的字符串对象。地址不同所以s1和s2不相等。第三句输出,等式右边的字符串常量“ab”仅是一个字符串常量,同s1所指向的对象无关。而用equals函数则是只比较值,所以相等。
2.请查看String.equals()方法的实现代码,注意学习其实现方法。
anObject instanceof String;
//首先上边的语句,先判断anObject是不是String类的一个实例,如果是运行下边的语句
String anotherString = (String)anObject;
//字符串是一个引用数据类型,本身是String个对象,
//在这里把传进来的anObject这个对象,赋给anotherString (需要类型转换)
//他当然可以调用String类里的成员,你说的count、value、offset都是String的成员
int n = count;//这个count是原始字符串的长度
if (n == anotherString.count) { //把字符串长度和要比较的字符串长度对比,长度都不同的话就不用比字符串内容了
char v1[] = value;//把原始字符串义字符形式存入数组
char v2[] = anotherString.value; //把要比较字符串义字符形式存入数组
int i = offset;//数组下标
int j = anotherString.offset; //????
while (n-- != 0) { //遍历数组,比较 数组元素是否相同
if (v1[i++] != v2[j++])
return false;//在遍历的过程中如果有不同的就返回false;
}
return true;
}
}
return false;
}
3.请阅读JDK中String类上述方法的源码,模仿其编程方式,编写一个MyCounter类,它的方法也支持上述的“级联”调用特性,其调用示例为: MyCounter counter1=new MyCounter(1); MyCounter counter2=counter1.increase(100).decrease(2).increase(3); …
4.字串加密
设计思路:输入一串字母,储存在字符串变量中。将每个字母+3(即加密),用charAt()方法取字符串中的字符,加密后的新字串为str1.输出str1即可。

源代码:
import java.util.Scanner;
public class PassWord {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.println("请输入要加密的字符串");
String str;
int n=0;
str=input.nextLine();
n=str.length();
char a;
int n1=0;
String str1=new String();
for(int i=0;i<n;i++){
a=str.charAt(i); //取字符
a=(char)(a+3);
str1=str1+a;
}
System.out.println("加密后的子串是:"+str1);
}
}


此程序还有很多不完善的地方,例如没有解密操作,没有进行输入的判断以及后三个字母的密码。
5.整理String类的Length()、charAt()、 getChars()、replace()、 toUpperCase()、 toLowerCase()、trim()、toCharArray()使用方法
Length():获取字串长度,字符串对象中包含length属性,即字符串的长度,使用String类中的length()方法可以获得该属性
CharAt():获取指定位置的字符
getChars:获取从指定位置起的子串复制到字符数组中(它有四个参数,1.被拷贝字符在字串中的起始位置 2.被拷贝的最后一个字符在字串中的下标再加1 3.目标字符数组 4.拷贝的字符放在字符数组中的起始下标),不返回任何值,前面加void
replace():子串替换,通过String类的replace()方法,可以将原字符串中的某个字符替换为指定的字符,并得到一个新的字符串(两个参数,一个是旧字符,一个是新字符)
toUpperCase()、 toLowerCase():大小写转换,在String类中提供了两个用来实现字母大小写转换的方法,它们的返回值均为转换后的字符串,其中toLowerCase()用来将字符串中的所有大写字母改为小写字母,,方法toUpperCase()用来将字符串中的所有小写字母改为大写字母。
trim():去除头尾空格,通过String类的trim()方法,可以通过去掉字符串的首尾空格得到一个新的字符串,该方法的具体定义如下:public String trim()
toCharArray():将字符串对象转换为字符数组
java-05String课堂练习的更多相关文章
- java第一课堂
java第一课堂视频请在优酷搜索java第一课堂即可
- JAVA首次课堂测试总结
暑期生活已经结束,新的学期也已经开始,而暑期放假之前约定的JAVA首次课堂测试也如期的到来,本次测试真的可以学到和多东西,也有很多感想. 首先体会最深的就是系主任所说的软件工程不是那么好学的,真的需要 ...
- Java 第一次课堂测验
周一下午进行了开学来java第一次课堂测验,在课堂上我只完成了其中一部分,现代码修改如下: 先定义 ScoreInformation 类记录学生信息: /** * 信1805-1 * 胡一鸣 * 20 ...
- Java 第一次课堂测试总结。
Java 第一次课堂测试总结. 昨天参加了JAVA的开学测试,课上没有完成计算基点的功能,以下是修改完成后的代码. 首先是ScoreInformation类来存储学生信息. //信1805-1 王正 ...
- Java课程课堂测试05
大致要求:将十道计算题输出至TXT文件,再读取文件至控制台,然后在控制台中输入答案并评判对错 我在大致的要求当中已经将我的设计思路体现了出来 首先,实现计算题的设计,第二步要对计算题循环,将答案存到一 ...
- Java课程课堂作业代码
前言 本文章只是单纯记录课堂老师布置的课堂作业代码,题目都比较简单,所以没有写解题思路,相信大家都能理解,当然其中有的解法和代码不是最优的,当时只是为了完成题目,后来也懒得改了,如果有不恰当或者不正确 ...
- MYSQL和JAVA(课堂笔记)
MYSQL 数据库管理工具 JAVA 编程语言 数据库驱动(JAVA和MYSQL对接方式) 到官网上下载驱动 加载驱动 import java.sql.Connection;import java. ...
- Java—Day5课堂练习
package com.lovo.classes;import java.util.Scanner;public class day5Test { public static void main ...
- Java的课堂实验
题目是:用Aplet创建一个小程序,使得当你的鼠标经过图片时,放歌~ 其中,补充知识:1.MouseMotionListener这个和MouseListener这两个监听器要了解以下 2.Aplet这 ...
- java实现课堂随机点名小程序
通过jdbc连接数据库实现读取学生花名册进行随机点名! ~jdbc连接mysql数据库 || 注释部分代码可通过读取.txt文档实现显示学生信息 ~通过点击开始按钮实现界面中间标签不断更新学生信息 ...
随机推荐
- django大全
数据库配置: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME':'dbname', 'USER': 'ro ...
- Kubernetes Heapster
Heapster是容器集群监控和性能分析工具,HPA.Dashborad.Kubectl top都依赖于heapster收集的数据. 但是Heapster从kubernetes 1.8以后已经被遗弃了 ...
- Kubernetes Controller Manager
Controller Manager 作为集群内部的管理控制中心,负责集群内的Node.Pod副本.Service Endpoint.NameSpace.ServiceAccount.Resource ...
- etcd 安装部署
etcd 是coreos团队开发的分布式服务发现键值存储仓库. github地址: https://github.com/coreos/etcd 安装: 1.下载etcd最新版本 https://gi ...
- Python 循环语句(while, for)
# while的使用 # 要注意些循环的时候,要考虑好循环的结束 # 考虑循环结束的方法有2种: # 1.考虑在循环体里改变while 的条件 # 2.在循环体通过break 语句跳出循环 # 方法1 ...
- StringTemplateLoader的用法
作为一个模板框架,freemarker的功能还是很强大的.在模板处理方面,freemarker有多种形式,最常见的方式是将模板文件放在一个统一的文件夹下面,如下形式:Configuration cfg ...
- Struts2 hibernate spring 概念总结
Hibernate工作原理及为什么要用? 原理:1.通过Configuration().configure();读取并解析hibernate.cfg.xml配置文件2.由hibernate.cfg.x ...
- 1.mysql导论
虽然之前用过mysql一年多,但大多只是会用,深入了解的不多.所以想利用平时时间 系统的总结总结. 一.什么是数据库:(数据库软件) 1).什么是数据库(软件):数据库(DB:DataBase ...
- 【bzoj1899】[Zjoi2004]Lunch 午餐(贪心+dp)
题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=1899 显然为了节省时间,吃饭慢的人要先打饭.于是我们可以先把所有人按吃饭时间排序,于是 ...
- js实现级联菜单(没有后台)
html代码: <!-- js级联菜单 --> <div id="cascMenu"> <select id="select" o ...