java string常見操作題

  1. 每個(gè)基本類型封裝類都有將string轉(zhuǎn)換為基本數(shù)據(jù)類型的方法
    對于非常大的數(shù)字請使用Long,代碼如下*
int age = Integer.parseInt("10");  
long id = Long.parseLong("190"); // 假如值可能很大.  
  1. 將char字符轉(zhuǎn)換為String
    Chraracter.toString(char)
  2. 將stringBuilder轉(zhuǎn)換為string蒂培,
    stringBuilder.tostring();
string類常用操作方法

1)string[] string.spilt(" ");//根據(jù)空格符進(jìn)行分割羔飞,返回值是string數(shù)組

        String strings = new String("hello world");
        System.out.println("原始字符串"+strings);
        String[] string1 = strings.split(" ");
        System.out.println("新字符串"+Arrays.toString(string1));
        /*輸出結(jié)果
        原始字符串hello world
        新字符串[hello, world]
        */

2)string string.replaceAll("a","b");//將a取代成b

String strings = new String("hello world");
        System.out.println("原始字符串:" + strings);
        String str2 = strings.replaceAll("hello", "你好");
        System.out.println("新字符串:" + str2);
        /*輸出結(jié)果
        原始字符串:hello world
        新字符串:你好 world
        */

3)int string.indexOf(substr);//返回substr在string中第一個(gè)index
4)string string.subString(fromIndex.endIndex);//返回被截取的字符串

String strings = new String("hello world");
        System.out.println("原始字符串:" + strings);
        String str2 = strings.substring(6,9);
        System.out.println("新字符串:" + str2);
        /*輸出結(jié)果
        原始字符串:hello world
        新字符串:wor
        */

5)string string.subString(fromIndex);//從第幾位開始往后截取
6)char string.charAt(index);返回第幾個(gè)字符
7)一切的前提,謹(jǐn)記string是final類的,不能更改绢涡。保存在方法區(qū)的常量池中凿傅。
8)用stringBuilder將string相反過來,因?yàn)閟tringBuilder.toReverse()方法疚宇,然后再stringBuilder.toReverse().toString()轉(zhuǎn)換為字符串

String strings = new String("hello world");
        System.out.println("原始字符串:" + strings);
        StringBuilder stringBuilder = new StringBuilder(strings);
        strings = stringBuilder.reverse().toString();
        System.out.println("新字符串:" + strings);
        /*輸出結(jié)果
        原始字符串:hello world
        新字符串:dlrow olleh
        */

9)謹(jǐn)記千萬不要采用string1+string2+string3這種引用變量的相加榜揖,這種會容易造成內(nèi)存溢出潜叛,常量池內(nèi)存溢出,因?yàn)檫@是引用變量逮栅,在程序運(yùn)行時(shí)才會操作。
若想string1這種相加捧存,可以采用字面值相加宙搬,如“123”+“abc”+"cbb",因?yàn)檫@種是編譯器會優(yōu)化,優(yōu)化成一個(gè)string玻侥」檬常或者采用曹鸠,stringBuilder的append(string)方法邻眷,將一個(gè)stringB附加到主stringBuilder后面岖常。

  1. string.操作方法蛉鹿,默認(rèn)會生成一個(gè)新的string保存在常量池中,不會改變原來常量池中的string导盅。
    因?yàn)槌A砍匾逯#瑂tring是final的,一經(jīng)創(chuàng)建無法改變鳖藕。
    看下面代碼:
String str = "abcde"; 
str.toUpperCase();
 System.out.println(str); //輸出還是abcde,而非ABCDE魔慷。```
因?yàn)閟tring是final的,string的改變內(nèi)容的操作方法會生成一個(gè)新的string在常量池中著恩。
2. 引用變量指向常量池中的新的str

String str = "abcde";
str = str.toUpperCase();
System.out.println(str);
//常量池中新生成一個(gè)string院尔,以前的引用變量指向新地址

3. 字符串反轉(zhuǎn),用string緩存類喉誊,stringBuffer或者stringBuilder.
因?yàn)閟tring緩存類邀摆,預(yù)先在堆內(nèi)存中開辟一個(gè)16字符的存儲空間,借以不斷改變string的值

String str = "abcde";
StringBuilder stringBuilder = new StringBuilder(str);
stringBuilder.reverse();
str = stringBuilder.toString();
System.out.println(str);//輸出edcba

stringBuilder是在堆內(nèi)存開辟一個(gè)存儲空間伍茄,對stringBuilder的修改全是在修改stringBuilder對象內(nèi)存本身栋盹。
4. 判斷字符串是否對稱:

String str = "abcde";
StringBuilder stringBuilder = new StringBuilder(str);
String str2 = stringBuilder.reverse().toString();
System.out.println(str.equal(str2));

5. 輸出字符串的子串,比如
string str = "@abc  efg . ghk";
string[] strArray = string.split("byChar");
string.split(“byChar”)方法
要求輸出abc efg ghk

String str = "ab@cd ghk efg";
str = str.replaceAll("@", " ");
String[] strArray = str.split(" ");
for (String str1 : strArray) {
System.out.println(str1);
}

6. 編寫一個(gè)程序敷矫,將下面的一段文本中的各個(gè)單詞的字母順序翻轉(zhuǎn)例获,“To be or not to be",將變成"oT eb ro ton ot eb."曹仗。

public static void main(String[] args) {
String str = "To be or not to be";
String[] strings = str.split(" ");
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < strings.length; i++) {
StringBuilder s = new StringBuilder(strings[i]);
stringBuilder.append(s.reverse());
if (i < strings.length - 1)
stringBuilder.append(" ");
}
stringBuilder.append(".");
System.out.println(stringBuilder.toString());
}
/**
* 輸出結(jié)果:oT eb ro ton ot eb.
/
/
*
* 輸出結(jié)果:oT eb ro ton ot eb.
*/

7. 
```String s="name=zhangsan age=18 classNo=090728"```
將上面的字符串拆分榨汤,結(jié)果如下:
    ```zhangsan 18 090728```

public static void main(String[] args) {
String s = "name=zhangsan age=18 classNo=090728";
String[] ss = s.split(" ");
StringBuffer sb = new StringBuffer();
for (int i = 0; i < ss.length; i++) {
String[] ss2 = ss[i].split("=");
sb.append(ss2[1]);
sb.append(" ");
}
System.out.println(sb);
}

8. 判斷一個(gè)字符串是否包含另一個(gè)字符串?
答:
```int i = str.indexof("sss");```
如果不包含怎茫,則返回-1.如果包含則返回被包含字符串的起始位置收壕。

if(str.indexof()!=-1){包含};

9. 給定一個(gè)字符串,判斷該字符串中是否包含某個(gè)子串.如果包含,求出子串的所有出現(xiàn)位置.如:```"abcbcbabcb34bcbd"```中,```"bcb"```子串的出現(xiàn)位置為: 1,7,12.字符串和子串均由用戶輸入

public static void main(String[] args) {
String userInput = "abcbcbabcb34bcbd";
String subString = "bcb";
int index = 0;
while (true) {
if (userInput.indexOf(subString, index) != -1) {
System.out.println(userInput.indexOf(subString, index));
index = userInput.indexOf(subString, index) + subString.length();
} else
break;
}
}

10. 給定一個(gè)長度,隨機(jī)產(chǎn)生一個(gè)該長度的字符串,由大寫,小寫字母以及數(shù)字組成Java中隨機(jī)數(shù)的生成:
java.util.Random r = new java.util.Random();
int a = r.nextInt(100): a 0-99的隨機(jī)數(shù)

public class suiji {
public static void main(String[] args) {

    Scanner scanner = new Scanner(System.in);
    System.out.println("請輸入一個(gè)整數(shù)");
    int shuru = scanner.nextInt();
    char[] s = new char[shuru];
    for (int i = 0; i < shuru; i++) {
        int a = (int) (Math.random() * 3);
        if (a == 0) {
            s[i] = (char) (Math.random() * 10 + 48);
        } else if (a == 1) {
            s[i] = (char) (Math.random() * 26 + 65);
        } else {
            s[i] = (char) (Math.random() * 26 + 97);
        }
    }
    System.out.println(s);

/**
*方法二用Random
*/
// Scanner scanner = new Scanner(System.in);
// int zs = scanner.nextInt();
// Random random = new Random();
// char[] sz = new char[zs];
// for (int i = 0; i < zs; i++) {
// int b = random.nextInt(3);
// if (b == 0) {
// sz[i] = (char) (random.nextInt(10) + 48);
// } else if (b == 1) {
// sz[i] = (char) (random.nextInt(26) + 65);
// } else if (b == 2) {
// sz[i] = (char) (random.nextInt(26) + 97);
// }
// }
// System.out.println(sz);
}
}

11. 給定一個(gè)由數(shù)字組成的字符串,如:```"1239586838923173478943890234092"```,統(tǒng)計(jì)出每個(gè)數(shù)字出現(xiàn)的次數(shù)

public static void Method_Three()
{
Scanner scanner = new Scanner(System.in);
String string = scanner.next();
int[] c = new int[10];
for (int i = 0; i < string.length(); i++)
{
char c1 = string.charAt(i); //48-57
int a = c1-48; // 類型轉(zhuǎn)換
c[a]++;
}
for (int i = 0; i < c.length; i++)
{
System.out.println(i+" 出現(xiàn)的次數(shù): "+c[i]);
}

    System.out.println("=========方法二==========");
    String s = "12548954231351486214894562";
    char[] ch = s.toCharArray();
     
    Map<Character, Integer> map = new HashMap<Character, Integer>();
    Set<Character> set = map.keySet();
    for (int i = 0; i < ch.length; i++)
    {
        if (set.contains(ch[i])) // 判斷map中已經(jīng)有的char值
        {
            map.put(ch[i], map.get(ch[i])+1);
        } else
        {
            map.put(ch[i], 1); // 第一次放入map中
        }
    }
    Set<Character> set2 = map.keySet();
    for (Character character : set2)
    {
        System.out.println(character+"=========="+map.get(character));
    }
}
12. 輸出字符串里的大寫字母數(shù),小寫英文字母數(shù),非英文字母數(shù)

public static void main(String[] args) {
String s = "ddejidsEFALDFfnef2357 3ed";
int da=0,xiao=0,fei=0;
for (int i = 0; i < s.length(); i++) {
char a = s.charAt(i);
if (Character.isUpperCase(a))
da++;
else if (Character.isLowerCase(a))
xiao++;
else
fei++;
}
System.out.println("大寫字母:"+da+" "+"小寫字母:"+xiao+" "+"非字母"+fei);
}
/**
* 輸出結(jié)果:大寫字母:6 小寫字母:13 非字母6
*/

##### 總結(jié):字符串的常見操作無非幾種
1.字符串反轉(zhuǎn) 用stringBuilder.reverse();
2.字符串切割 String[] strArray = str.spilt("spiltChar");
3.字符串拼接 用stringBuilder.append("str");

/**

  • 1蜜宪,給定一個(gè)字符串?dāng)?shù)組虫埂。按照字典順序進(jìn)行從小到大的排序。

  • {"nba","abc","cba","zz","qq","haha"}

  • <p>

  • 思路:

  • 1,對數(shù)組排序圃验〉舴可以用選擇,冒泡都行损谦。

  • 2,for嵌套和比較以及換位岖免。

  • 3,問題:以前排的是整數(shù),比較用的比較運(yùn)算符照捡,可是現(xiàn)在是字符串對象颅湘。

  • 字符串對象怎么比較呢?爽了栗精,對象中提供了用于字符串對象比較的功能闯参。
    /
    public class StringTest_1 {
    /
    *

    • @param args
      */
      public static void main(String[] args) {
      String[] arr = {"nba", "abc", "cba", "zz", "qq", "haha"};
      printArray(arr);
      sortString(arr);
      printArray(arr);
      }

    public static void sortString(String[] arr) {
    for (int i = 0; i < arr.length - 1; i++) {
    for (int j = i + 1; j < arr.length; j++) {
    if (arr[i].compareTo(arr[j]) > 0)//字符串比較用compareTo方法
    swap(arr, i, j);
    }
    }
    }

    private static void swap(String[] arr, int i, int j) {
    String temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp;
    }

    public static void printArray(String[] arr) {
    System.out.print("[");
    for (int i = 0; i < arr.length; i++) {
    if (i != arr.length - 1)
    System.out.print(arr[i] + ", ");
    else
    System.out.println(arr[i] + "]");
    }
    }
    }


package cn.itcast.p1.string.test;

/*

  • 2,一個(gè)子串在整串中出現(xiàn)的次數(shù)悲立。
  • "nbaernbatynbauinbaopnba"
  • 思路:
  • 1鹿寨,要找的子串是否存在,如果存在獲取其出現(xiàn)的位置薪夕。這個(gè)可以使用indexOf完成脚草。
  • 2,如果找到了原献,那么就記錄出現(xiàn)的位置并在剩余的字符串中繼續(xù)查找該子串馏慨,
  • 而剩余字符串的起始位是出現(xiàn)位置+子串的長度.
  • 3,以此類推,通過循環(huán)完成查找姑隅,如果找不到就是-1写隶,并對 每次找到用計(jì)數(shù)器記錄。

*/

public class StringTest_2 {

/**
 * @param args
 */
public static void main(String[] args) {

    String str = "nbaernbatnbaynbauinbaopnba";
    String key = "nba";
     
    int count = getKeyStringCount_2(str,key);
    System.out.println("count="+count);
             
}

public static int getKeyStringCount_2(String str, String key) {
     
    int count = 0;
    int index = 0;
     
    while((index = str.indexOf(key,index))!=-1){
         
        index = index + key.length();
        count++;
         
    }
     
    return count;
}

/**
 * 獲取子串在整串中出現(xiàn)的次數(shù)讲仰。
 * @param str
 * @param key
 * @return
 */
public static int getKeyStringCount(String str, String key) {
     
    //1,定義計(jì)數(shù)器慕趴。 
    int count = 0;
     
    //2,定義變量記錄key出現(xiàn)的位置鄙陡。
    int index = 0;
     
    while((index = str.indexOf(key))!=-1){
         
        str = str.substring(index+key.length());
        count++;
    }
    return count;
}

}


package cn.itcast.p1.string.test;

/*

  • 3冕房,兩個(gè)字符串中最大相同的子串。
  • "qwerabcdtyuiop"
  • "xcabcdvbn"
  • 思路:
  • 1趁矾,既然取得是最大子串毒费,先看短的那個(gè)字符串是否在長的那個(gè)字符串中。
  • 如果存在愈魏,短的那個(gè)字符串就是最大子串。
  • 2,如果不是呢培漏,那么就將短的那個(gè)子串進(jìn)行長度遞減的方式去子串溪厘,去長串中判斷是否存在。
  • 如果存在就已找到牌柄,就不用在找了畸悬。

*/
public class StringTest_3 {

/**
 * @param args
 */
public static void main(String[] args) {

    String s1 = "qwerabcdtyuiop";
    String s2 = "xcabcdvbn";

    String s = getMaxSubstring(s2, s1);
    System.out.println("s=" + s);
}

/**
 * 獲取最大子串
 * 
 * @param s1
 * @param s2
 * @return
 */
public static String getMaxSubstring(String s1, String s2) {
     
    String max = null,min = null;
    max = (s1.length()>s2.length())?s1:s2;
     
    min = max.equals(s1)?s2:s1;
     
    System.out.println("max="+max);
    System.out.println("min="+min);
     
     
     
    for (int i = 0; i < min.length(); i++) {
         
        for(int a = 0,b = min.length()-i; b != min.length()+1; a++,b++){
             
            String sub = min.substring(a, b);

// System.out.println(sub);
if(max.contains(sub))
return sub;
}
}

    return null;
}

}


package cn.itcast.p1.string.test;

/*

  • 4,模擬一個(gè)trim功能一致的方法珊佣。去除字符串兩端的空白

  • 思路:

  • 1蹋宦,定義兩個(gè)變量。

  • 一個(gè)變量作為從頭開始判斷字符串空格的角標(biāo)咒锻。不斷++冷冗。

  • 一個(gè)變量作為從尾開始判斷字符串空格的角標(biāo)。不斷--惑艇。

  • 2,判斷到不是空格為止蒿辙,取頭尾之間的字符串即可。
    */
    public class StringTest_4 {

    /**

    • @param args
      */
      public static void main(String[] args) {

      String s = " ab c ";

      s = myTrim(s);
      System.out.println("-" + s + "-");
      }

    public static String myTrim(String s) {

     int start = 0, end = s.length() - 1;
    
     while (start <= end && s.charAt(start) == ' ') {
         start++;
     }
     while (start <= end && s.charAt(end) == ' ') {
         end--;
     }
     return s.substring(start, end + 1);
    

    }

}

1. 編程. 已知字符串:"this is a test of java".
按要求執(zhí)行以下操作:
(1) 統(tǒng)計(jì)該字符串中字母s出現(xiàn)的次數(shù)
(2) 取出子字符串"test"
(3) 用多種方式將本字符串復(fù)制到一個(gè)字符數(shù)組Char[] str中.
(4) 將字符串中每個(gè)單詞的第一個(gè)字母變成大寫滨巴, 輸出到控制臺思灌。
(5) 用兩種方式實(shí)現(xiàn)該字符串的倒敘輸出。(用StringBuffer和for循環(huán)方式分別實(shí)現(xiàn))
(6) 將本字符串轉(zhuǎn)換成一個(gè)字符串?dāng)?shù)組恭取,要求每個(gè)數(shù)組元素都是一個(gè)有意義的額英文單詞,并輸出到控制臺
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末泰偿,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子蜈垮,更是在濱河造成了極大的恐慌耗跛,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件窃款,死亡現(xiàn)場離奇詭異课兄,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)晨继,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進(jìn)店門烟阐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人紊扬,你說我怎么就攤上這事蜒茄。” “怎么了餐屎?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵檀葛,是天一觀的道長。 經(jīng)常有香客問我腹缩,道長屿聋,這世上最難降的妖魔是什么空扎? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮润讥,結(jié)果婚禮上转锈,老公的妹妹穿的比我還像新娘。我一直安慰自己楚殿,他們只是感情好撮慨,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著脆粥,像睡著了一般砌溺。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上变隔,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天规伐,我揣著相機(jī)與錄音,去河邊找鬼弟胀。 笑死楷力,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的孵户。 我是一名探鬼主播萧朝,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼夏哭!你這毒婦竟也來了检柬?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤竖配,失蹤者是張志新(化名)和其女友劉穎何址,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體进胯,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡用爪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了胁镐。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片偎血。...
    茶點(diǎn)故事閱讀 38,646評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖盯漂,靈堂內(nèi)的尸體忽然破棺而出颇玷,到底是詐尸還是另有隱情,我是刑警寧澤就缆,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布帖渠,位于F島的核電站,受9級特大地震影響竭宰,放射性物質(zhì)發(fā)生泄漏空郊。R本人自食惡果不足惜份招,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望渣淳。 院中可真熱鬧脾还,春花似錦、人聲如沸入愧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽棺蛛。三九已至,卻和暖如春巩步,著一層夾襖步出監(jiān)牢的瞬間旁赊,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工椅野, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留终畅,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓竟闪,卻偏偏與公主長得像离福,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子炼蛤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 【程序1】 題目:古典問題:有一對兔子妖爷,從出生后第3個(gè)月起每個(gè)月都生一對兔子,小兔子長到第三個(gè)月后每個(gè)月又生一對兔...
    葉總韓閱讀 5,128評論 0 41
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法理朋,類相關(guān)的語法絮识,內(nèi)部類的語法,繼承相關(guān)的語法嗽上,異常的語法次舌,線程的語...
    子非魚_t_閱讀 31,598評論 18 399
  • Java經(jīng)典問題算法大全 /*【程序1】 題目:古典問題:有一對兔子,從出生后第3個(gè)月起每個(gè)月都生一對兔子兽愤,小兔子...
    趙宇_阿特奇閱讀 1,850評論 0 2
  • 一彼念、 1、請用Java寫一個(gè)冒泡排序方法 【參考答案】 public static void Bubble(int...
    獨(dú)云閱讀 1,353評論 0 6
  • 在這里不是要翻舊賬控訴誰烹看,只是覺得寫出來給大家提個(gè)醒国拇,惡人是隨處可見的,人要是走背字立馬雪上加霜惯殊。在連通的幾個(gè)月寫...
    掌聲雷動閱讀 120評論 0 0