다크호스 프로그래머Java 기초문자열 조작

ASP. Net + Android + IOS 개발, Net 교육, 당신 과 의 교류 기대!
1. String 류 의 간단 한 이해
자바 에서 문자열 은 가장 자주 사용 되 는 클래스 중 하나 입 니 다. String 류 에 대한 성명 방식 은 두 가지 가 있 습 니 다. 하 나 는 직접적인 String str = "abc" 입 니 다.다른 하 나 는 new 키 워드 를 통 해 String str = new String ("abc") 을 설명 합 니 다.    그렇다면 두 가지 방식 은 어떤 차이 가 있 을 까?이 문 제 를 설명 하려 면 중요 한 개념 을 이해 해 야 한다. 하나의 문자열 은 String 류 의 익명 대상 이 고 익명 의 대상 은 메모리 공간 을 열 었 으 며 직접 사용 할 수 있 는 대상 이다.두 번 째 방식 에 대해 new 키 워드 를 사용 하면 어떻게 든 새로운 공간 을 열 수 있 습 니 다. 그러나 이때 공간의 내용 은 'abc' 입 니 다. 실제로 이때 메모리 에 두 개의 공간 이 존재 합 니 다. str 는 이때 new 키 워드 를 가리 키 는 공간 입 니 다. 원래 'abc' 가 차지 하 는 공간 은 쓰레기 공간 으로 변 합 니 다.따라서 일반적으로 String str = new String (") 을 사용 하지 않 습 니 다.라 는 식 으로 말 했다.[그래, 사실은 한 마디 로 뉴 키워드 가 String 을 설명 할 때 공간 낭 비 를 초래 할 수 있다.]
String 에서 자주 사용 하 는 API 에 대해 문 서 를 보면 서 학습 노트 를 기록 하 는 것 이 재 미 없 을 것 같 습 니 다. 학습 과정 에서 실제 장면 에 따라 점점 알 게 될 것 입 니 다.그래, 이렇게 많은 말 을 하 니 정말 공허 하 다.
2. String 류 의 간단 한 연습
다음은 String 연습 을 몇 개 해 보도 록 하 겠 습 니 다.
1. 주어진 문자열 의 지정 한 위 치 를 반전 시 킵 니 다. 예 를 들 어 'abcdefg' 이 'abcfedg' 로 바 뀌 었 습 니 다.
2. 다른 문자열 에 나타 나 는 문자열 을 가 져 오 는 횟수
3. 두 문자열 의 최대 같은 하위 문자열 가 져 오기
잔말 말고 코드 를 직접 올 리 고 설명 하 세 요.
package com.itheima.string;

import java.util.regex.Pattern;

/**
 *       1.             
 * 2.                    
 * 3.              
 */
public class StringDemo {

	public static void main(String[] args) {
		String str = "a..12345b";
		//System.out.println(reverse(str, 1, 6));
		//String str1 = ".";
		//System.out.println(getShowNum(str1, str));
		System.out.println(getMaxSubstring(str, "a.1234b5"));
	}
	
	/**
	 *              
	 * @param s1 
	 * @param s2
	 * @return         
	 */
	public static String getMaxSubstring(String s1,String s2){
		//               
		String minStr = s1.length()>s2.length()? s2:s1;
		String maxStr = s2.equals(minStr)? s1:s2;
		//           
		for(int i = 0 ; i < minStr.length();i++){
			//   abcd      abcd    ,   abc,bcd     ab,bc,cd         0,        (  -  )
			//                    
			for(int beginIndex = 0,endIndex = minStr.length()-i;endIndex <= minStr.length();beginIndex++,endIndex++){
				String temp = minStr.substring(beginIndex, endIndex);
				if(maxStr.contains(temp)){
					return temp;
				};
			}
		}
		return "";
	}

	/**
	 *                    
	 * src   dest       
	 * @param src 
	 * @param dest      
	 * @return      
	 */
	public static int getShowNum(String src,String dest){
		if(src == null || src.isEmpty()){
			throw new IllegalArgumentException("src cannot empty");
		}
		int index = 0;
		while(dest.contains(src)){
			index++;
			//         src       
			dest = Pattern.compile(src, Pattern.LITERAL).matcher(dest).replaceFirst("");
		}
		
		return index;
	}
	
	/**
	 *        ,                    
	 * 
	 * @param src
	 *                 
	 * @param beginIndex
	 *                  
	 * @param endIndex
	 *                   (  ,           ) [beginIndex,endIndex);
	 * @return          
	 */
	public static String reverse(String src, int beginIndex, int endIndex) {
		if (beginIndex < 0 || beginIndex > endIndex || endIndex > src.length()
				|| beginIndex > src.length()) {
			throw new IllegalArgumentException("illegal index,please check beginIndex,endIndex.");
		}
		if(src == null || src.isEmpty()){
			return "";
		}
		//          
		String temp = src.substring(beginIndex, endIndex);
		char[] tempchs = temp.toCharArray();
		char[] chs = src.toCharArray();
		//            [1-6),          5,    0--4
		for(int i = beginIndex; i <= endIndex-beginIndex ;i++){
			chs[i] = tempchs[endIndex-i-1];
		}
		return new String(chs);
	}

}

개발 에 있어 서 String str = "aa" + "bb" + "cc" 를 최대한 적 게 사용 합 니 다.이런 형식 은 메모리 에 세 개의 공간 을 열 것 이다. 특히 for 순환 에서 되도록 이렇게 사용 하지 마라.자바 API 에서 StringBuffer, StringBuilder 클래스 를 제공 합 니 다. 이 두 종 류 는 문자열 의 추가 작업 을 쉽게 할 수 있 습 니 다. 예 를 들 어 StringBuilder mBuider = new StringBuilder ("aaa");mBuilder.append("").append("");이런 방법 은 비교적 간단 해서 자바 문 서 를 참조 하여 연습 할 수 있다.상기 두 가지 조작 방식 은 똑 같 습 니 다. 차이 점 은 StringBuffer 는 스 레 드 가 안전 하고 조작 할 때 스 레 드 의 잠 금 체 제 를 사 용 했 기 때문에 효율 이 비교적 낮 습 니 다.
자바 의 기본 데이터 형식 에 대한 포장 류
  boolean Boolean;int Integer;byte Byte;short Short;long Long ;double Double;float Float;char Character;
jdk 1.5 이후 이 몇 가지 데이터 형식 은 자동 으로 포장 하고 상 자 를 뜯 는 작업 을 실현 할 수 있 습 니 다.예 를 들 어 Integer i = 4;Integer i = new Integer (4) 에 해당 합 니 다. 포장 하 다  int j = i;자동 으로 상 자 를 뜯 습 니 다. int j = Integer. value Of (i) 에 해당 합 니 다.
기본 API 방법 은 학습 작업 에서 끊임없이 사용 해 야 하기 때문에 천천히 기억 할 것 이다.[상술 한 총 결 에 문제 가 있 을 수 있 으 니 여러분 의 비판 과 지적 을 바 랍 니 다.]
ASP. Net + Android + IOS 개발, Net 교육, 당신 과 의 교류 기대!
자세히 보기:http://edu.csdn.net

좋은 웹페이지 즐겨찾기