题目描述
给定一个非空字符串S,其被N个'-'分隔成N+1的子串,给定正整数K,要求除第一个子串外,
其余的子串每K个字符组成新的子串,并用'-',分隔。
对于新组成的每一个子串,如果它含有的小写字母比大写字母多,则将这个子串的所有大写字母转换为小写字母;
反之,如果它含有的大写字母比小写字母多,则将这个子串的所有小写字母转换为大写字母;大小写字母的数量相等时,
不做转换
输入描述:
输入为两行,第一行为参数K,第二行为字符串S。
输出描述
输出转换后的字符串
用例一
3
12abc-abCABc-4aB@
输出
12abc-abc-ABC-4aB-@
用例二
12
12abc-abCABc-4aB@。
package com.tarena.test.B10;
import java.util.Arrays;
import java.util.Scanner;
import java.util.StringJoiner;
/**
* @author Administrator
*
*/
public class B16 {
public static void main(String[] args) {
try(Scanner sc = new Scanner(System.in)){
int k = sc.nextInt();
String str = sc.next();
System.out.println(resultStr(k,str));
}
}
public static String resultStr(int k,String str) {
StringJoiner sj = new StringJoiner("-");
String[] arr = str.split("-");
sj.add(arr[0]);
arr[0]="";
StringBuilder temp = new StringBuilder();
Arrays.stream(arr).forEach(temp::append);
for(int i =0,len=temp.length();i<len;i+=k) {
String subStr= temp.substring(i,Math.min(i+k, len));
sj.add(change(subStr));
}
return sj.toString();
}
public static String change(String subStr) {
int lowC = 0;
int uppC = 0;
for(int i=0,len=subStr.length();i<len;i++) {
char c = subStr.charAt(i);
if(c>='a'&&c<='z') {
lowC ++;
}else if(c>='A'&&c<='Z') {
uppC++;
}
}
if(lowC>uppC) {
return subStr.toLowerCase();
}else if(lowC<uppC) {
return subStr.toUpperCase();
}
return subStr;
}
}
了解知识点
1 StringJoiner 类的使用
2 Math类的使用
3 String 类的toLowerCase,toUpperCase方法的使用。所以大家需要知道String类里面自带了哪些方法
4 stream 流的使用规则