作业05 string

思考问题一:

请运行以下示例代码StringPool.Java,查看其输出结果。如何释这种输出结果?从中你能总结出什么?

运行结果:

true

true

false

原因:

1)在java中,内容相同的字符串常量只保存一份以节约内存,所以s0,s1,s2实际上引用的是同一个对象。

2)编译器在编译s2一句时,会去掉“+”号,直接把两个字串连接起来得一个字串。这种优化工作由编译器自动完成。

3)当直接使用new关键字创建字符串对象时,虽然值一致,但仍然是两个独立的对象。

为什么会有上述的输出结果? 从中你又能总结什么?

1)给字串变量赋值意味着:两个变量()现在引用同一个字符串对象“a”!

2)String对象的内容是只读的,使用“+”修改s1变量的值,实际上是得到了一个新的字符串对象,其内容为“ab”,它与原先s1所引用的对象“a”无关,所以,返回false。

3)代码中的“ab”字符串是一个常量,它所引用的字符串与s1所引用的“ab”对象无关。

4)String.equals()方法可以比较两个字符串的内容。

思考问题2:

请查看String.equals()方法,学习其实现方法。

public boolean equals(Object anObject) {

if (this
== anObject) {

return
true;

}

if
(anObject instanceof String) {                      //判断anObject是不是String类的一个实例

String
anotherString = (String)anObject;        //把anObject赋值给anotherString

int n =
count;                                             //count是String的成员代表原始字符串长度

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++])                          //在遍历的过程中如果有不同的就返回false

return
false;

}

return
true;                              //相等返回true

}

}

return
false;                            //不是String实例返回false

}

思考问题3:

整理String类的length()、charAt()、getChars()、replace()、toUpperCase()、toLowerCase()、trim()、toCharArray()使用说明。

length():求字符串长度

public int length()

String s=”asfsdfwfsadf”;

System.out.println(s.length());

结果:12

charAt():

public charAt(int index)//index 是字符下标,返回字符串中指定位置的字符

String s=”Hello”;

System.out.println(s.charAt(3));

结果:l

getChars()获取从指定位置起的字串复制到字符数组中。

四个参数的含义
1.被拷贝字符在字串中的起始位置
2.被拷贝的最后一个字符在字串中的下标再加1
3.目标字符数组
4.拷贝的字符放在字符数组中的起始下标

getChars():public int getChars()//将字符从此字符串复制到目标字符数组

String str = "abcdefghikl";

Char[] ch = new char[8];

str.getChars(2,5,ch,0);

for(int=0;i<ch.length;i++)

System.out.print(ch[i]);

结果:cd

replace():替换字符串

public int replace()

String s=”\\\”;

System.out.println(s.replace(“\\\”,”///”));

结果///;

toUpperase():将字符串全部转换成大写

public String toUpperCase()

System.out.println(new String(“hello”).toUpperCase());

toLowerCse():将字符串全部转换成小写

public String toLowerCase()//将字符串全部转换成小写

System.out.println(new String(“HELLO”).toLowerCase());

trim():去两边空格

public String trim()

String x=”ax  c”;

System.out.println(x.trim());//是去两边空格的方法

toCharArray():将字符串对象中的字符转换为一个字符数组

String x=”abcd”;

char myChar[]=x.toCharArray();

System.out.println(“myChar[1]”+myChar[1]);

结果:b

程序题

古罗马皇帝凯撒在打仗时曾经使用过以下方法加密军事情报:请编写一个程序,使用上述算法加密或解密用户输入的英文字串。

1 程序设计思想

1)定义BufferedReader的对象reader并初始化;

2)输入字符串给aa;

3)字符串转化为字符数组给arr;

4)分情况加密:(1)字符是英文字母中的最后三个时,减23并赋值给字符数组;

(2)不是最后三个时加3并赋值给字符数组;

5)输出字符数组

2 流程图

3 源代码:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Jiami {

@SuppressWarnings("null")
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
int i=0,n=0;
BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));//定义BufferedReader对象

System.out.println("请输入一个字符串:");        
String aa=reader.readLine();//输入字符串
n=aa.length();

char arr[]=aa.toCharArray();//转化为字符数组

for( i=0;i<n;i++)

{
if((arr[i]>=88&&arr[i]<=90)||(arr[i]>=120&&arr[i]<=122)) //如果是 x,y,z时,减23

arr[i]=(char) (arr[i]-23);
else
arr[i]=(char)(arr[i]+3);         //加3
}

for( i=0;i<n;i++)               //输出
System.out.print(arr[i]);
}

}

4结果截图

时间: 2024-11-08 21:57:50

作业05 string的相关文章

05 String

[实验题目] 字串加密 古罗马皇帝凯撒在打仗时曾经使用过以下方法加密军事情报: 一.程序设计思想 首先编写代码要求输入想要加密的字符串,注意用到String str=input.nextLine();进行一行字符串的输入,计算字符串的长度赋值给n,定义char字符类型的a,用for循环结构把str用str.charAt(i)取出给a,再给a赋值+3,让其进行加密,在利用str1=str1+a,强制转化为String类型的,把加密后的进行输出. 二.程序流程图 三.源代码 package jiam

软件工程个人作业05

设计思路: 一个数组首尾相接来找和最大的子数组,我认为就是寻找一个能产生和最大子数组的一种数组的最大排列,即去掉最小的负数.若数组中都是正数,所有数相加就能和最大,若数组中有负数,则去掉最小的负数,在剩下的子数组中找一个和最大的子数组.去掉最小负数的方法就是遍历数组,找到最小值,把其放在数组的首位或者是末位就可以了. 源代码: import java.util.*; public class ArrayMax { public static void main(String args[]) {

课后作业 05 -- 输出一段带字母与数字的随机数

Console.Write("您欲得到四位随机验证码的数量是:"); int a = int.Parse(Console.ReadLine()); Console.WriteLine("随机验证码依次为:"); char[] arr = new char[] {'1','2','3','4','5','6','7','8','9','a','b','c','d','e','f', 'g','h','i','j','l','m','n','o','p','q','r'

课堂作业05

设计思路:(1) 将Id赋给第一个值,并使Times=1; (2)往后找,相同的帖子加1,不同的帖子减1.直到Times为0.然后将Id赋给最后一个处理的值. (3)最后处理完成后Times不等于0的那个Id便是水王.函数体:String Find(String ID[], int N) { String Id=NULL; int Times, i; for(i = Times = 0; i < N; i++) { if(Times == 0) //如果帖子重复度不高,就会等于0.就将Id赋给最

动手动脑(课堂作业05)

1,思考 class Grandparent { public Grandparent() { System.out.println("GrandParent Created."); } public Grandparent(String string) { System.out.println("GrandParent Created.String:" + string); } } class Parent2 extends Grandparent { publi

动手动脑(课堂作业05)第二句错误显示为:类型不匹配:不能从 Mammal 转换为 Dog 第三句错误显示为:类型不匹配:不能从 Cat 转换为 Dog

---恢复内容开始--- 为什么子类的构造方法在运行之前,必须调用父类的构造方法?能不能反过来?为什么不能反过来? 构造函数(constructor)是一种特殊的方法 .主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中 .特别的一个类可以有多个构造函数 ,可根据其参数个数的不同或参数类型的不同来区分它们 即构造函数的重载.构造函数的功能主要用于在类的对象创建时定义初始化的状态.构造一个对象,先调用其构造方法,来初始化其成员函数和成员变量.子类

课堂作业05 《6种质量属性战术》

实现xxxx系统质量属性战术 1.可用性战术:错误检测战术 对XXXX系统的所有信息的输入及数据处理进行异常的处理.尤其对信息进行填报时,编写异常类来捕获异常. 2.易用性战术:设计战术 (1)在进行归口部门填写时,可以使用搜索词进行提示,方便进行填写. 在填写需求征集表格时,对于用户已注册填写过的基本信息,可以折叠,看起来更加简洁明了. (2)将用户接口与应用的其余部分分离开来:为方便用户接口的修改.将用户操作界面与实现分开实现. 3.可修改性战术:局部化修改 设计登陆的泛化模块,不同身份登陆

软件工程个人作业05(二维数组求最大子数组的和)

题目:返回一个二维整数数组中最大联通子数组的和. 要求:输入一个二维整形数组,数组里有正数也有负数.求所有子数组的和的最大值.要求时间复杂度为O(n). 程序要使用的数组放在一个叫 input.txt 的文件中, 文件格式是: 数组的行数, 数组的列数, 每一行的元素, (用逗号分开) 每一个数字都是有符号32位整数,当然,行数和列数都是正整数.程序设计思路:此次试验考虑到需要求最大联通子数组和.可以定义一个类(其中有value,x,y,neighbor,select),主函数里定义一个二维的对

Java课堂作业05

1.随机生成10个数,填充一个数组,然后用消息框显示数组内容,接着计算数组元素的和,将结果也显示在消息框中. 设计思路:定义一个长度为10的数组---->数组初始化---->利用随机数给数组元素分别赋值--->转换成字符串求和--->输出结果 程序流程图: 程序源代码: 结果截图: 编程注意及总结: 编写该程序定义数组时一定要初始化,随机数产生也借助for循环.