- 每個(gè)基本類型封裝類都有將string轉(zhuǎn)換為基本數(shù)據(jù)類型的方法
對于非常大的數(shù)字請使用Long,代碼如下*
int age = Integer.parseInt("10");
long id = Long.parseLong("190"); // 假如值可能很大.
- 將char字符轉(zhuǎn)換為String
Chraracter.toString(char)
- 將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后面岖常。
- 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] + "]");
}
}
} - @param args
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è)有意義的額英文單詞,并輸出到控制臺