我没有找到任何答案..如果我有:String s = "How are you"
?
如何将其拆分为两个字符串,因此第一个字符串包含0..s.length()/2
而第二个字符串来自s.length()/2+1..s.length()
?
谢谢!
答案 0 :(得分:22)
这应该做:
String s = "How are you?";
String first = s.substring(0, s.length() / 2); // gives "How ar"
String second = s.substring(s.length() / 2); // gives "e you?"
String.substring(int i)
返回从位置i
开始的子字符串
String.substring(int i, int j)
返回从i
开始到j-1
结束的子字符串。
(请注意,如果字符串的长度为奇数,则由于整数除法中的舍入,second
将比first
多一个字符。)
答案 1 :(得分:5)
你可以使用'substring(start,end)',但当然检查string之前是否为null:
String first = s.substring(0, s.length() / 2);
String second = s.substring(s.length() / 2);
你期待奇数长度的字符串吗?在这种情况下,您必须添加逻辑以正确处理此案例。
答案 2 :(得分:5)
String s0 = "How are you?";
String s1 = s0.subString(0, s0.length() / 2);
String s2 = s0.subString(s0.length() / 2);
只要s0不为空。
修改
这适用于奇数长度字符串,因为您没有向任一索引添加1。令人惊讶的是,它甚至适用于零长度字符串“”。
答案 3 :(得分:4)
这是一种将字符串按长度分成 n 项的方法。 (如果字符串长度不能完全除以 n ,则最后一项将更短。)
public static String[] splitInEqualParts(final String s, final int n){
if(s == null){
return null;
}
final int strlen = s.length();
if(strlen < n){
// this could be handled differently
throw new IllegalArgumentException("String too short");
}
final String[] arr = new String[n];
final int tokensize = strlen / n + (strlen % n == 0 ? 0 : 1);
for(int i = 0; i < n; i++){
arr[i] =
s.substring(i * tokensize,
Math.min((i + 1) * tokensize, strlen));
}
return arr;
}
测试代码:
/**
* Didn't use Arrays.toString() because I wanted to have quotes.
*/
private static void printArray(final String[] arr){
System.out.print("[");
boolean first = true;
for(final String item : arr){
if(first) first = false;
else System.out.print(", ");
System.out.print("'" + item + "'");
}
System.out.println("]");
}
public static void main(final String[] args){
printArray(splitInEqualParts("Hound dog", 2));
printArray(splitInEqualParts("Love me tender", 3));
printArray(splitInEqualParts("Jailhouse Rock", 4));
}
<强>输出:强>
['猎犬','狗']
['爱','我te','nder']
['Jail','hous','e Ro','ck']
答案 4 :(得分:2)
使用String.substring(int)和String.substring(int, int)方法。
int cutPos = s.length()/2;
String s1 = s.substring(0, cutPos);
String s2 = s.substring(cutPos, s.length()); //which is essentially the same as
//String s2 = s.substring(cutPos);
答案 5 :(得分:2)
我没有找到任何答案。
您应该始终关注的第一个地方是相关课程的javadoc:在这种情况下java.lang.String
。 javadocs
答案 6 :(得分:0)
public int solution(final String S, final int K) {
int splitCount = -1;
final int count = (int) Stream.of(S.split(" ")).filter(v -> v.length() > K).count();
if (count > 0) {
return splitCount;
}
final List<String> words = Stream.of(S.split(" ")).collect(Collectors.toList());
final List<String> subStrings = new ArrayList<>();
int counter = 0;
for (final String word : words) {
final StringJoiner sj = new StringJoiner(" ");
if (subStrings.size() > 0) {
final String oldString = subStrings.get(counter);
if (oldString.length() + word.length() <= K - 1) {
subStrings.set(counter, sj.add(oldString).add(word).toString());
} else {
counter++;
subStrings.add(counter, sj.add(word).toString());
}
} else {
subStrings.add(sj.add(word).toString());
}
}
subStrings.forEach(
v -> {
System.out.printf("[%s] and length %d\n", v, v.length());
}
);
splitCount = subStrings.size();
return splitCount;
}
public static void main(final String [] args){
final MessageSolution messageSolution = new MessageSolution();
final String message = "SMSas5 ABC DECF HIJK1566 SMS POP SUV XMXS MSMS";
final int maxSize = 11;
System.out.println(messageSolution.solution(message, maxSize));
}