如何在Java中按位置拆分字符串
我没有找到答案。。如果我有:如何在Java中按位置拆分字符串,java,string,Java,String,我没有找到答案。。如果我有:String s=“你好”? 如何将其拆分为两个字符串,第一个字符串包含from0..s.length()/2,第二个字符串包含froms.length()/2+1..s.length() 谢谢 您可以使用“substring(start,end)”,但当然要先检查字符串是否为null,然后再执行以下操作: String first = s.substring(0, s.length() / 2); String second = s.substring(s.leng
String s=“你好”
?
如何将其拆分为两个字符串,第一个字符串包含from0..s.length()/2
,第二个字符串包含froms.length()/2+1..s.length()
谢谢 您可以使用“substring(start,end)”,但当然要先检查字符串是否为null,然后再执行以下操作:
String first = s.substring(0, s.length() / 2);
String second = s.substring(s.length() / 2);
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?"
- 使用一个参数返回从位置
i
- 使用两个参数返回从
开始到i
结束的子字符串j-1
second
将比first
多一个字符,这是由于整数除法中的舍入。)
只要s0不为空
编辑
这将适用于奇数长度字符串,因为两个索引中都没有添加1。令人惊讶的是,它甚至可以在长度为零的字符串上工作。这里有一个方法,可以按长度将字符串拆分为n个项目。(如果字符串长度不能精确除以n,则最后一项将更短。) 输出:
/**
* 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));
}
[‘猎犬’、‘狗’]['Love'、'me te'、'nder']
['Jail','hous','e Ro','ck'] 我没有找到答案 您应该经常查看的第一个地方是相关类的javadocs:在本例中为
java.lang.String
。javadocs
- 可在Oracle网站(如在)上在线浏览
- 包含在任何Sun/Oracle Java SDK发行版中
- 可能可以在Java IDE中查看,并且
- 并且可以通过谷歌搜索找到
s.substring(cutPos+1,s.length())代码>,最好使用s.substring(cutPos+1)代码>对不起,这也不行。给出“a”
和“e you”
(如果您将cutPos-
更改为cutPos=
@aioobe,谢谢….s2上的cutPos+1是导致问题的原因。我已修复it@The精英先生,您可能想将第一个-
也更改为=
。但这甚至不起作用…它会给一个“你”
和“e you”
@Torres,不,这将丢失中间字符。(并对空字符串抛出异常)Alois的答案不正确,Torres也不正确。正确的答案是string s=“你好吗?”;string first=s.substring(0,s.length()/2);string second=s.substring(s.length()/2)
我给出了一些提示,并解释了该方法的工作原理。抱歉,它并不是为了完全满足要求。现在更正了…@roddik:鉴于长度是一个int,2是一个int,这将进行整数除法,导致第一个字符串比第二个字符串短。请在代码中添加解释,以便对其他读者有用。拆分具有指定长度且不带分词符的字符串,预期输入包含无前导或尾随空格的字符串。
String s0 = "How are you?";
String s1 = s0.subString(0, s0.length() / 2);
String s2 = s0.subString(s0.length() / 2);
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));
}
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;
}
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));
}