JAVA课程作业04
1 .请查看String.equals()方法的实现代码,注意学习其实现方法。
public boolean equals(Object anObject)
- 将此字符串与指定的对象比较。当且仅当该参数不为
null
,并且是与此对象表示相同字符序列的String
对象时,结果才为true
。 - 参数:
anObject
- 与此String
进行比较的对象。- 返回:
- 如果给定对象表示的
String
与此String
相等,则返回true
;否则返回false
。
举例:s1.equals(s2) :判断s1是否等于s2
s1.equals(“ab”):判断s1是否等于字符串“ab”
2.字串加密:古罗马皇帝凯撒在打仗时曾经使用过以下方法加密军事情报:
请编写一个程序,使用上述算法加密或解密用户输入的英文字串要求设计思想、程序流程图、源代码、结果截图。
设计思想:
让用户选择要完成的功能:加密或解密,加密算法需要将输入的字符加3后在输出,解密算法需要将输入的字符减3后输出。
程序流程图:
源代码:
1 //字串加密 2 import javax.swing.JOptionPane;//引入JOptionPane类 3 public class StringEncryption { 4 5 public static void main(String[] args) {//JAVA程序入口 6 //选项 7 Object[] possibleValues = { "加密", "解密"}; 8 Object selectedValue = JOptionPane.showInputDialog(null, "请选择:", "Input", 9 JOptionPane.INFORMATION_MESSAGE, null,possibleValues, possibleValues[0]); 10 //加密 11 if(selectedValue.equals("加密")){ 12 String inputValue = JOptionPane.showInputDialog("请输入要加密的字符串:"); 13 String outputValue=new String(); 14 for(int i=0;i<inputValue.length();i++){ 15 char flag = inputValue.charAt(i); 16 if(flag>'W')//XYZ需要特殊对待 17 flag=(char) (flag+3-26); 18 else 19 flag =(char) (flag+3); 20 outputValue=outputValue+flag; 21 } 22 JOptionPane.showMessageDialog(null,"加密后的字符串为:"+outputValue); 23 } 24 //解密 25 else if(selectedValue.equals("解密")){ 26 String inputValue = JOptionPane.showInputDialog("请输入要解密的字符串:"); 27 String outputValue=new String(); 28 for(int i=0;i<inputValue.length();i++){ 29 char flag = inputValue.charAt(i); 30 if(flag<'D')//ABC需要特殊对待 31 flag=(char) (flag-3+26); 32 else 33 flag=(char)(flag-3); 34 outputValue=outputValue+flag; 35 } 36 JOptionPane.showMessageDialog(null,"解密后的字符串为:"+outputValue); 37 } 38 //选择错误 39 //else 40 // JOptionPane.showMessageDialog(null,"没有这个选项"); 41 } 42 43 }
结果截图:
错误分析:
<1.不清楚选项消息框的使用方法,所以有了最后的一个else。
<2.总想着只用一个式子就解决所有的字符转换,结果一直没成功,浪费了很多时间。
3.整理String类的Length()、charAt()、 getChars()、replace()、 toUpperCase()、 toLowerCase()、trim()、toCharArray()使用说明、阅读笔记
length
public int length()
- 返回此字符串的长度。长度等于字符串中 Unicode 代码单元的数量。
- 指定者:
- 接口
CharSequence
中的length
- 返回:
- 此对象表示的字符序列的长度。
实例:inputValue.length();
charAt
public char charAt(int index)
- 返回指定索引处的
char
值。索引范围为从0
到length() - 1
。序列的第一个char
值位于索引0
处,第二个位于索引1
处,依此类推,这类似于数组索引。如果索引指定的
char
值是代理项,则返回代理项值。 - 指定者:
- 接口
CharSequence
中的charAt
- 参数:
index
-char
值的索引。- 返回:
- 此字符串指定索引处的
char
值。第一个char
值位于索引0
处。 - 抛出:
IndexOutOfBoundsException
- 如果index
参数为负或小于此字符串的长度。
getChars
public void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
- 将字符从此字符串复制到目标字符数组。
要复制的第一个字符位于索引
srcBegin
处;要复制的最后一个字符位于索引srcEnd-1
处(因此要复制的字符总数是srcEnd-srcBegin
)。要复制到
dst
子数组的字符从索引dstBegin
处开始,并结束于索引:dstbegin + (srcEnd-srcBegin) - 1
- 参数:
srcBegin
- 字符串中要复制的第一个字符的索引。srcEnd
- 字符串中要复制的最后一个字符之后的索引。dst
- 目标数组。dstBegin
- 目标数组中的起始偏移量。- 抛出:
IndexOutOfBoundsException
- 如果下列任何一项为 true:srcBegin
为负。srcBegin
大于srcEnd
srcEnd
大于此字符串的长度dstBegin
为负dstBegin+(srcEnd-srcBegin)
大于dst.length
replace
public String replace(char oldChar, char newChar)
- 返回一个新的字符串,它是通过用
newChar
替换此字符串中出现的所有oldChar
得到的。如果
oldChar
在此String
对象表示的字符序列中没有出现,则返回对此String
对象的引用。否则,创建一个新的String
对象,它所表示的字符序列除了所有的oldChar
都被替换为newChar
之外,与此String
对象表示的字符序列相同。示例:
"mesquite in your cellar".replace('e', 'o') returns "mosquito in your collar" "the war of baronets".replace('r', 'y') returns "the way of bayonets" "sparring with a purple porpoise".replace('p', 't') returns "starring with a turtle tortoise" "JonL".replace('q', 'x') returns "JonL" (no change)
- 参数:
oldChar
- 原字符。newChar
- 新字符。- 返回:
- 一个从此字符串派生的字符串,它将此字符串中的所有
oldChar
替代为newChar
。
replace
public String replace(CharSequence target, CharSequence replacement)
- 使用指定的字面值替换序列替换此字符串所有匹配字面值目标序列的子字符串。该替换从字符串的开头朝末尾执行,例如,用 "b" 替换字符串 "aaa" 中的 "aa" 将生成 "ba" 而不是 "ab"。
- 参数:
target
- 要被替换的 char 值序列replacement
- char 值的替换序列- 返回:
- 所得 String
- 抛出:
NullPointerException
- 如果target
或replacement
为null
。
toUpperCase
public String toUpperCase()
- 使用默认语言环境的规则将此
String
中的所有字符都转换为大写。此方法等效于toUpperCase(Locale.getDefault())
。注: 此方法与语言环境有关,如果用于应独立于语言环境解释的字符串,则可能生成不可预料的结果。示例有编程语言标识符、协议键、HTML 标记。例如,
"title".toUpperCase()
在 Turkish(土耳其语)语言环境中返回"T?TLE"
,其中“?”是 LATIN CAPITAL LETTER I WITH DOT ABOVE 字符。对于与语言环境有关的字符,要获得正确的结果,请使用toUpperCase(Locale.ENGLISH)
。 - 返回:
- 要转换为大写的
String
。
toUpperCase
public String toUpperCase(Locale locale)
- 使用给定
Locale
的规则将此String
中的所有字符都转换为大写。大小写映射关系基于Character
类指定的 Unicode 标准版。由于大小写映射关系并不总是 1:1 的字符映射关系,因此所得String
的长度可能不同于原String
。下表中给出了几个与语言环境有关和 1:M 大小写映射关系的一些示例。
语言环境的代码 小写 大写 描述 tr (Turkish) \u0069 \u0130 小写字母 i -> 大写字母 I,上面有点 tr (Turkish) \u0131 \u0049 小写字母 i,无点 -> 大写字母 I (all) \u00df \u0053 \u0053 小写字母 sharp s -> 两个字母:SS (all) Fahrvergnügen FAHRVERGNÜN - 参数:
locale
- 使用此语言环境的大小写转换规则- 返回:
- 要转换为大写的
String
。
toLowerCase
public String toLowerCase()
- 使用默认语言环境的规则将此
String
中的所有字符都转换为小写。这等效于调用toLowerCase(Locale.getDefault())
。注: 此方法与语言环境有关,如果用于应独立于语言环境解释的字符串,则可能生成不可预料的结果。示例有编程语言标识符、协议键、HTML 标记。例如,
"TITLE".toLowerCase()
在 Turkish(土耳其语)语言环境中返回"t?tle"
,其中“?”是 LATIN SMALL LETTER DOTLESS I 字符。对于与语言环境有关的字符,要获得正确的结果,请使用toLowerCase(Locale.ENGLISH)
。 - 返回:
- 要转换为小写的
String
。
toLowerCase
public String toLowerCase(Locale locale)
- 使用给定
Locale
的规则将此String
中的所有字符都转换为小写。大小写映射关系基于Character
类指定的 Unicode 标准版。由于大小写映射关系并不总是 1:1 的字符映射关系,因此所得String
的长度可能不同于原String
。下表中给出了几个小写映射关系的示例:
语言环境的代码 大写字母 小写字母 描述 tr (Turkish) \u0130 \u0069 大写字母 I,上面有点 -> 小写字母 i tr (Turkish) \u0049 \u0131 大写字母 I -> 小写字母 i,无点 (all) French Fries french fries 将字符串中的所有字符都小写 (all) 将字符串中的所有字符都小写 - 参数:
locale
- 使用此语言环境的大小写转换规则- 返回:
- 要转换为小写的
String
。
trim
public String trim()
- 返回字符串的副本,忽略前导空白和尾部空白。
如果此
String
对象表示一个空字符序列,或者此String
对象表示的字符序列的第一个和最后一个字符的代码都大于'\u0020'
(空格字符),则返回对此String
对象的引用。否则,若字符串中没有代码大于
'\u0020'
的字符,则创建并返回一个表示空字符串的新String
对象。否则,假定 k 为字符串中代码大于
'\u0020'
的第一个字符的索引,m 为字符串中代码大于'\u0020'
的最后一个字符的索引。创建一个新的String
对象,它表示此字符串中从索引 k 处的字符开始,到索引 m 处的字符结束的子字符串,即this.substring(k, m+1)
的结果。此方法可用于截去字符串开头和末尾的空白(如上所述)。
- 返回:
- 此字符串移除了前导和尾部空白的副本;如果没有前导和尾部空白,则返回此字符串。
toCharArray
public char[] toCharArray()
- 将此字符串转换为一个新的字符数组。
- 返回:
- 一个新分配的字符数组,它的长度是此字符串的长度,它的内容被初始化为包含此字符串表示的字符序列。