標籤:win bd09 ora port owa gtk via scsi gnu
【實驗任務】
1、實驗題目:字串加密
2、實驗內容:古羅馬皇帝凱撒在打仗時曾經使用過以下方法加密軍事情報:
3、設計思想:本程式共分為部分:1、利用輸入語句輸入使用者要加密的字串,有兩種方法:(1)利用scanner語句輸入,然後利用.nextLine()轉換為string類型的字串。(2)利用視窗輸入語句,JOptionPane.showInputDialog(“…”),輸入的就是string類型的字串。2、定義一個flag判斷該字串中是否含有不符合規定的字元,如果有在輸出的時候輸出使用者輸入錯誤的字元。3、定義兩個string字串,一個是儲存正確的字元,另一個是儲存不符合規定的字元。利用for迴圈和if語句,將輸入的字元分成兩部分一部分是a-w和A-W,轉換方法為+3。第二部分為x-z和X-Z,轉換方法為—23,得到abc。4、輸出加密後的字串或輸出輸入錯誤的字元,同樣和輸入時一樣有兩種方法,本程式採用的第二種方法。
4、程式流程圖:
5、原始碼:Kaisa.java
//字串加密。
//ZhaoXuan Li,October 27th,2016.
import javax.swing.JOptionPane;
public class Kaisa
{
public static void main(String[] args)
{
String a=JOptionPane.showInputDialog("請輸入要加密的明文:");
boolean flag=true;
int s=a.length(),i;
String output="",output1="";
for(i=0;i<s;i++)
{
if((a.charAt(i)<=‘w‘&&a.charAt(i)>=‘a‘)||(a.charAt(i)<=‘W‘&&a.charAt(i)>=‘A‘))
{
output+=(char)(a.charAt(i)+3);
}
else if((a.charAt(i)>=‘x‘&&a.charAt(i)<=‘z‘)||(a.charAt(i)>=‘X‘&&a.charAt(i)<=‘Z‘))
{
output+=(char)(a.charAt(i)-23);
}
else
{
output1+=a.charAt(i);
output1+=" ";
flag=false;
}
}
if(flag) JOptionPane.showMessageDialog(null,"您輸入的明文為:"+a+"\n譯文為:"+output,"encryption",JOptionPane.PLAIN_MESSAGE);
else JOptionPane.showMessageDialog(null,"您輸入的"+output1+"不符合要求(不在大小寫字母範圍內!)","errow",JOptionPane.PLAIN_MESSAGE);
}
}
6、結果:
課後作業
課後作業之字串加密、動手動腦之String.equals()方法、整理String類的Length()、charAt()、 getChars()、replace()、 toUpperCase()、 toLowerCase()、trim()、toCharArray()使用說明、閱讀筆記
Length():擷取字串長度,字串是一個對象,在這個對象中包含length屬性,使用String類中的length()方法可以擷取字串長度。
charAt():擷取指定位置的字元。
getChars():擷取從指定位置起的子串複製到字元數組中(它有四個參數,1.被拷貝字元在字串中的起始位置 2.被拷貝的最後一個字元在字串中的下標再加1 3.目標字元數組 4.拷貝的字元放在字元數組中的起始下標)。
replace():字串替換,通過String類的replace()方法,可以將原字串中的某個字元替換為指定的字元,並得到一個新的字串,該方法的具體定義如下:public String replace(char oldChar,char newChar)。
toUpperCase():大寫轉換,在String類中提供用來實現字母大寫轉換的方法,傳回值為轉換後的字串,方法toUpperCase()用來將字串中的所有小寫字母改為大寫字母。
toLowerCase()、小寫轉換,在String類中提供用來實現字母小寫轉換的方法,傳回值為轉換後的字串,方法toLowerCase()用來將字串中的所有大寫字母改為小寫字母。
trim():去除頭尾空格,通過String類的trim()方法,可以通過去掉字串的首尾空格得到一個新的字串,該方法的具體定義如下:public String trim()。
toCharArray():將字串對象轉換為字元數組。
動手動腦一
- ? 請運行以下範例程式碼StringPool.java,查看其輸出結果。如何解釋這樣的輸出結果?從中你能總結出什嗎?
實驗結果:
總結:在Java中,內容相同的字串常量(“Hello”)只儲存一份以節約記憶體,所以s0,s1,s2實際上引用的是同一個對象。
編譯器在編譯s2一句時,會去掉“+”號,直接把兩個字串聯接起來得一個字串(“Hello”)。這種最佳化工作由Java編譯器自動完成。
當直接使用new關鍵字建立字串對象時,雖然值一致(都是“Hello”),但仍然是兩個獨立的對象。
動手動腦二
再看……
為什麼會有上述的輸出結果?從中你又能總結出什嗎?
總結:給字串變數賦值意味著:兩個變數(s1,s2)現在引用同一個字串對象“a”!
String對象的內容是唯讀,使用“+”修改s1變數的值,實際上是得到了一個新的字串對象,其內容為“ab”,它與原先s1所引用的對象”a”無關,所以,s1==s2返回false;
代碼中的“ab”字串是一個常量,它所引用的字串與s1所引用的“ab”對象無關。
String.equals()方法可以比較兩個字串的內容。
動手動腦三
請查看String.equals()方法的實現代碼,注意學習其實現方法。
public class StringEquals {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
String s1=new String("Hello");
String s2=new String("Hello");
System.out.println(s1==s2);
System.out.println(s1.equals(s2));
String s3="Hello";
String s4="Hello";
System.out.println(s3==s4);
System.out.println(s3.equals(s4));
}
}
實驗結果:
動手動腦四
String str="abc";
String result=str.trim().toUpperCase().concat("defg");
- ? 請閱讀JDK中String類上述方法的源碼,模仿其編程方式,編寫一個MyCounter類,它的方法也支援上述的“級聯”調用特性,其調用樣本為:
MyCounter counter1=new MyCounter(1);
MyCounter counter2=counter1.increase(100).decrease(2).increase(3);
….
實驗代碼:MyCounter.java
//模仿其編程方式,編寫一個MyCounter類,它的方法也支援上述的“級聯”調用特性。
//ZhaoXuan Li,October 27th,2016.
public class MyCounter
{
public static void main(String[] args)
{
String s="aqz";
String result=s.trim().toUpperCase().concat("qwe");
System.out.println(result);
}
}
實驗結果:
Java字串課後作業