第1關(guān):length()方法與compareTo()方法的使用 - 花名冊
相關(guān)知識
String類的對象的創(chuàng)建
可以按照創(chuàng)建類的對象的一般方法來創(chuàng)建String
類的對象:
String string = new String();
也可以直接在創(chuàng)建對象時指定字符串內(nèi)容:
String string1 = "Hello World"; //string1字符串內(nèi)容為"Hello World"
String string2 = ""; //string2字符串內(nèi)容為空
length()方法
String
類中的length()
方法將返回字符串對象的長度,請看示例:
String string = "abcd";
int len = string.length();
System.out.println(len)
運行上述代碼,執(zhí)行結(jié)果為:
4
compareTo()方法
String
類中的compareTo()
方法將返回兩個字符串對象的比較結(jié)果,若相等,返回0
。不相等時,從兩個字符串第1
個字符開始比較,返回第一個不相等的字符差;另一種情況,較長字符串的前面部分恰巧是較短的字符串,返回它們的長度差。
請看示例:
String s1 = "abc";
String s2 = "abcd";
String s3 = "abcdfg";
String s4 = "1bcdfg";
String s5 = "cdfg";
System.out.println( s1.compareTo(s2) ); // -1 (前面相等,s1長度小1)
System.out.println( s1.compareTo(s3) ); // -3 (前面相等,s1長度小3)
System.out.println( s1.compareTo(s4) ); // 48 ("a"的ASCII碼是97,"1"的的ASCII碼是49,所以返回48)
System.out.println( s1.compareTo(s5) ); // -2 ("a"的ASCII碼是97,"c"的ASCII碼是99,所以返回-2)
編程要求
本關(guān)的編程任務(wù)是補全右側(cè)代碼片段中Begin
至End
中間的代碼,具體要求如下:
-
roster1
變量為之前的全班花名冊,roster2
變量為小明統(tǒng)計的全班花名冊。 -
你將被要求輸出
3
行:-
第一行為
roster1
的長度; -
第二行為
roster2
的長度; -
第三行為兩個花名冊是否相同,若相同,輸出“相同”;反之輸出“不相同”(若姓名順序不同,也算作不相同)。
-
package step1;
import java.util.Scanner;
public class Roster {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
/********** Begin *********/
String str1 = scanner.nextLine();
String[] roster1 = str1.split(" ");
int num1 = str1.length();
String str2 = scanner.nextLine();
String[] roster2 = str2.split(" ");
int num2 = str2.length();
System.out.println(num1);
System.out.println(num2);
if(str1.compareTo(str2)==0){
System.out.println("相同");
}
else{
System.out.println("不相同");
}
/********** End *********/
}
}
?第2關(guān):substring()方法與indexOf()方法的使用 - 姓名查找
相關(guān)知識
substring()方法
在String
類中有兩個substring()
方法,第一種如下:
String.substring(int start)
其中,start
為要開始截取的位置的索引,方法將返回一個字符串,內(nèi)容為原字符串從start
位置開始到原字符串結(jié)束中間的數(shù)據(jù)。
例如:
String str = "hello world!";
System.out.println(str.substring(1));
System.out.println(str.substring(3));
System.out.println(str.substring(6));
執(zhí)行以上代碼,結(jié)果如下:
ello world!
lo world!
world!
如果start
大于字符串的長度,將會拋出越界異常。
substring()
方法:
String.substring(int start, int end)
其中,start
為開始位置索引,end
為結(jié)束為止索引,方法將返回一個字符串,內(nèi)容為原字符串從start
位置開始到end
位置結(jié)束中間的數(shù)據(jù)。
例如:
String str = "hello world!";
System.out.println(str.substring(1, 4));
System.out.println(str.substring(3, 5));
System.out.println(str.substring(0, 4));
執(zhí)行以上代碼,結(jié)果如下:
ell
lo
hell
indexOf()方法
indexOf()
方法用于在String
類的對象中查找子字符串,方法返回一個整數(shù)值,為子字符串的開始位置,若存在多個子字符串,返回數(shù)值最小的整數(shù)值;如果沒有找到子字符串,返回-1
。請看示例:
String str = "abcdefghijklmnabc";
System.out.println(str1.indexOf("c")); //結(jié)果為2,為字符"c"第一次出現(xiàn)的位置
System.out.println(str1.indexOf("x")); //結(jié)果為-1,沒有找到字符"x"
編程要求
本關(guān)的編程任務(wù)是補全右側(cè)代碼片段中Begin
至End
中間的代碼,具體要求如下:
-
data
變量為亂碼文件的文本數(shù)據(jù),由命令行讀入; -
name
變量為需要查找的姓名,由命令行讀入; -
你將被要求輸出若干行,每一行為查找到的姓名的位置。
package step2;
import java.util.Scanner;
public class NameSearch {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
/********** Begin *********/
String data=sc.next();
String name=sc.next();
int n=data.indexOf(name);
//System.out.println(n);
//int m=data.length();
int m=n;
while(n!=-1){
System.out.println(m);
data=data.substring(n+2);
n=data.indexOf(name);
m=m+n+2;
}
/********** End *********/
}
}
?第3關(guān):String串類操作 - 文件名與郵箱驗證
相關(guān)知識
為了完成本關(guān)任務(wù),你需要掌握:如何判斷字符串相等。
equals 方法
在java
中如果要判斷兩個基礎(chǔ)數(shù)據(jù)類型是否相等,使用的是雙等號,例如:1
是否等于1
,使用的就是1==1
,而判斷字符串是否相等需要使用equals
方法,這是因為,每一個字符串都可能會有不同的內(nèi)存地址,而==
判斷的是內(nèi)存地址是否一致。而有很多情況,兩個字符串的內(nèi)存地址是不同的,但是字符串的值都是一致的,這樣使用==
就不能準(zhǔn)確的驗證他們是否相等了。
例如:
String str1 = new String("張三");
String str2 = new String("張三");
System.out.println(str1 == str2);
System.out.println(str1.equals(str2));
輸出結(jié)果:
false
true
我們發(fā)現(xiàn)使用==
不能準(zhǔn)確的判斷兩個字符串是否相等,而使用equals()
方法是可以的。
String 常用方法總結(jié)
編程要求
請仔細閱讀右側(cè)代碼,根據(jù)方法內(nèi)的提示,在Begin - End
區(qū)域內(nèi)進行代碼補充,具體任務(wù)如下:
- 判斷輸入的
Java
文件名是否正確,判斷郵箱格式是否正確。其中:合法的文件名應(yīng)該以?.java
?結(jié)尾;合法的郵箱名中至少要包含?@
?, 并要求?@
?在?.
?之前。
package step3;
public class HelloWorld {
public void judge(String fileName,String email){
//請在此添加實現(xiàn)代碼
/********** Begin **********/
int fi=fileName.length();
int em=email.length();
if(fi<6){
System.out.println("Java文件名無效");
}
else{
String nn=fileName.substring(fi-5, fi);
//System.out.println(nn);
if(!nn.equals(".java")){
System.out.println("Java文件名無效");
}
else{
System.out.println("Java文件名正確");
}
}
int a=email.indexOf("@");
int b=email.indexOf(".");
int c=email.indexOf(".@");
if(a==-1|b==-1|c!=-1){
System.out.println("郵箱名無效");
}
else{
if(a>b){
System.out.println("郵箱名無效");
}
else{
if(em>3){
System.out.println("郵箱名正確");
}
}
}
/********** End **********/
}
}
?第4關(guān):StringBuffer類的定義和使用 - 字母反轉(zhuǎn)
任務(wù)描述
在本關(guān)中,你將被要求編寫一個程序,將一段文本中的各個單詞的字母順序進行反轉(zhuǎn),例如:
oT eb ro ton ot eb
反轉(zhuǎn)后變?yōu)椋?To be or not to be
相關(guān)知識
split方法
在處理字符串的時候我們經(jīng)常需要將他們切割,然后分別處理,比如我們有一個字符串:張三,李四,王五,趙六
,現(xiàn)在我們想要將他們的名字拆分出來,變成一個單獨的字符串,如何做呢?
很簡單使用split
方法即可。
String str = "張三,李四,王五,趙六";
String[] names = str.split(",");
for (int i = 0; i < names.length; i++) {
System.out.println(names[i]);
}
輸出:
張三
李四
王五
趙六
StringBuffer類
StringBuffer
類和String
類一樣,也用來代表字符串,只是由于StringBuffer
的內(nèi)部實現(xiàn)方式和String
不同,StringBuffer
在進行字符串處理時,不生成新的對象,所以在內(nèi)存使用上,StringBuffer
類要優(yōu)于String
類。
StringBuffer
類中存在很多和String
類一樣的方法,這些方法在功能上是完全一樣的。
StringBuffer
類中也有一些獨特的方法,用于幫助我們更方便的實現(xiàn)某些功能。
StringBuffer類的對象的初始化
通常情況下使用構(gòu)造方法對其進行初始化:
StringBuffer stringBuffer = new StringBuffer();
這樣初始化出的StringBuffer
對象是一個空的對象。
如果需要創(chuàng)建帶有內(nèi)容的StringBuffer
對象,則可以使用:
StringBuffer stringBuffer = new StringBuffer("Hello World!");
這樣初始化出的StringBuffer
對象的內(nèi)容就是字符串"Hello World!"
。
append()方法
append()
方法的作用是追加內(nèi)容到當(dāng)前StringBuffer
對象的末尾,類似于字符串的連接,請看示例:
StringBuffer stringBuffer = new StringBuffer("Hello");
stringBuffer.append("World!");
System.out.println(stringBuffer);
執(zhí)行以上代碼,結(jié)果為:
HelloWorld!
reverse()方法
reverse()
方法將把當(dāng)前字符序列反轉(zhuǎn)后返回,請看示例:
StringBuffer stringBuffer = new StringBuffer("abc");
System.out.println(stringBuffer.reverse());
執(zhí)行以上代碼,結(jié)果為:
cba
StringBuffer對象和String對象互轉(zhuǎn)
注意,StringBuffer
和String
屬于不同的類型,也不能直接進行強制類型轉(zhuǎn)換,下面的代碼都是錯誤的:
StringBuffer s = "abc"; //賦值類型不匹配
StringBuffer s = (StringBuffer)"abc"; //不存在繼承關(guān)系,無法進行強轉(zhuǎn)
正確的對象之間互轉(zhuǎn)代碼如下:
String string1 = "Hello World!";
StringBuffer stringBuffer = new StringBuffer(string1); //String轉(zhuǎn)換為StringBuffer
String string2 = stringBuffer.toString(); //StringBuffer轉(zhuǎn)換為String
編程要求
本關(guān)的編程任務(wù)是補全右側(cè)代碼片段中Begin
至End
中間的代碼,具體要求如下:
-
data
變量為需要進行反轉(zhuǎn)的文本;文章來源:http://www.zghlxwxcb.cn/news/detail-772494.html -
ans
變量為反轉(zhuǎn)后的文本。文章來源地址http://www.zghlxwxcb.cn/news/detail-772494.html
package step4;
public class Reverse {
public static StringBuffer start(String data) {
StringBuffer ans = new StringBuffer();
/********** Begin *********/
String[] inf=data.split(" ");
//System.out.println("inf="+inf[0]);
//System.out.println("length="+inf.length);
for(int i=0;i<inf.length;i++){
StringBuffer str = new StringBuffer(inf[i]);
ans.append(str.reverse()+" ");
}
/********** End *********/
return ans;
}
}
到了這里,關(guān)于Educoder/頭歌JAVA——JAVA面向?qū)ο螅篠tring類的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!