關於java中大字符串中刪除匹配的小字符串

解決方法很多,這裏只寫兩個方法。

一、split()方法

String[] split(String regex)
          根據給定正則表達式的匹配拆分此字符串。
String[] split(String regex, int limit)
          根據匹配給定的正則表達式來拆分此字符串。

split有切割字符串的功能,在使用時有一下兩點注意事項:

事項一:

public class SlitDemo {
	public static void main(String[] args) {	
		String s = "aajava";
		String[] split = s.split("java");
		System.out.println("切割了"+split.length+"次");
		System.out.println("=====================");
		String s1 = "javaaa";
		String[] split1 = s1.split("java");
		System.out.println("切割了"+split1.length+"次");
	}

}

運行結果:

切割了1次
=====================
切割了2次

這裏的Split1字符串數組本質上存的是“”和“aa”,而Split字符串數組存的是“aa”。造成這種結果的原因是什麼呢?

這裏就記一下java習慣包左不包右,被切割的字符串若左邊沒有字符,則默認左邊的字符是“”。

事項二:

public class SlitDemo2 {
	public static void main(String[] args) {
		String s = "jajajavavavaa";
		String[] split = s.split("java"); //這裏要刪除字符串 s 中的“java”字符串
		StringBuilder builder = new StringBuilder();
		for (int i = 0; i < split.length; i++) {
			// 將切割後的結果拼接起來
			builder.append(split[i]);
		}
		System.out.println("切割後的結果: " + builder);
	}
}

運行結果:

切割後的結果: jajavavaa

我們從結果可以看出,字符串在進行完切割,拼接後,仍舊存在要刪除的小字符串“java”

我們將代碼修改一下,實現完全的刪除:

public class SlitDemo2 {
	public static void main(String[] args) {
		String s = "jajajavavavaa";
		String d = "java";
		int num = s.length();
		// 使用StringBuilder是爲了避免String不斷拼接,在常量池裏會產生很多字符串,容易導致內存不足。
		// 使用StringBuilder的append()方法,拼接在同一個字符串上,佔用的內存會小許多。
		StringBuilder builder = null;
		while (true) {
			if (!s.contains(d)) {
				break;
			}
			String[] split = s.split(d);
			builder = new StringBuilder();
			for (int i = 0; i < split.length; i++) {
				// 將切割後的結果拼接起來
				builder.append(split[i]);
			}
			s = builder + "";
		}
		System.out.println("切割後的結果: " + builder);
		// 把最開始的字符串字符個數 - 刪除後字符串的字符個數 / 你要刪的小字符創的長度
		int result = (num - builder.length()) / (d.length());
		System.out.println("出現的次數是:" + result);
	}
}

運行結果:

切割後的結果: a
出現的次數是:3

二、indexOf()和substring()配合使用

 int indexOf(String str)
          返回指定子字符串在此字符串中第一次出現處的索引。
 String substring(int beginIndex)
          返回一個新的字符串,它是此字符串的一個子字符串。
 String substring(int beginIndex, int endIndex)
          返回一個新字符串,它是此字符串的一個子字符串。

使用這個方法會出現的問題跟split()類似,都需要循環檢查除重。以下是代碼實現:

public static void QuChong() {

		int count = 0;
		String str1 = "java";
		String str2 = "jajajavavavaa";
		while (str2.indexOf(str1) != -1) {
			count++;
			// 拼接後繼續檢查是否還存在
			str2 = str2.substring(0, str2.indexOf(str1)) + str2.substring(str2.indexOf(str1) + str1.length());
			// 如果只是單純的檢查這個字符串裏摻雜着幾個小字符串,則不需要再添加上檢查過的字符串段,		
			// 即 str2.substring(0,str2.indexOf(str1))不需要再此加到str2裏
		}
		System.out.println("切割後的結果: "+str2);
		System.out.println("有" + count + "個重複段");
	}
切割後的結果: a
有3個重複段

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章