1. 程式人生 > >位元組跳動面試題 駝峰變數名轉換為下劃線式的 OneHTTOPRequest

位元組跳動面試題 駝峰變數名轉換為下劃線式的 OneHTTOPRequest

package 考試位元組跳動;
/** 
3
abcdef
changeName
OnHTTPRequest
 * 
 */
import java.util.Scanner;

public class ChangeName {
	
	public static void main(String[] args) {
		@SuppressWarnings("resource")
		Scanner scanner = new Scanner(System.in);

		int a = scanner.nextInt();//需要轉換幾組資料
		String[] strings = new String[a];//建立一個相應大小的字串陣列
		int flag = 0;//做一個標記數
		//0.獲取    將輸入的一定數量的字串分別放進建立的陣列中
		do {
			strings[flag] = scanner.next();
			flag++;
			a--;
		} while (a > 0);
		//
		for (int i = 0; i < flag; i++) {
			
			StringBuffer sb = new StringBuffer();//使用StringBuffer
			
			String str = strings[i];//將字串輪流寄存在臨時的str中
			//1.首字元會造成干擾,先將首字母無論大小寫改成小寫
			if (Character.isUpperCase(str.charAt(0))) {
				sb.append((char) (str.charAt(0) + 32));
			} else {
				sb.append(str.charAt(0));
			}
			for (int j = 1; j < str.length(); j++) {
				sb.append(str.charAt(j));
			}
			//System.out.println(sb.toString());
			
			//2.發現規律  _Mm m_M   小謝大寫 中插'_'  大寫小寫 前插'_';
			for (int ii = 0; ii < sb.length() - 1; ii++) {

				if (Character.isLowerCase(sb.charAt(ii)) && Character.isUpperCase(sb.charAt(ii + 1))) {
					sb.insert(ii + 1, '_');
					ii++;
					continue;
				}
				if (Character.isUpperCase(sb.charAt(ii)) && Character.isLowerCase(sb.charAt(ii + 1))) {
					if ('_' == (sb.charAt(ii - 1))) {
						continue;
					} else {
						sb.insert(ii, '_');
						ii++;
					}

				}
			}
			//插完下劃線後將剩下的大寫全部變成小寫
			for (int iii = 0; iii < sb.length(); iii++) {
				if (Character.isUpperCase(sb.charAt(iii))) {
					sb.setCharAt(iii,(char) (sb.charAt(iii)+32));
				}
			}
			
			//輸出每次轉換後的結果
			System.out.println(sb.toString());

		}

	}
}