私はプログラミングを初めて行っています。
私は3つの部分にこの文字列を分割する必要が文字列をJavaの複数のサブ文字列に分割する
String input="|abc{123{asd|xyz{456{qwe";
のような文字列を持っています。誰かが私を助けてください、私は期待してい
出力は
string1={"abc","xyz"}
no={"123","456"}
string2={"asd","qwe"}
です。
私はプログラミングを初めて行っています。
私は3つの部分にこの文字列を分割する必要が文字列をJavaの複数のサブ文字列に分割する
String input="|abc{123{asd|xyz{456{qwe";
のような文字列を持っています。誰かが私を助けてください、私は期待してい
出力は
string1={"abc","xyz"}
no={"123","456"}
string2={"asd","qwe"}
です。
は、次を使用することができます。
substring(int beginIndex, int endIndex) //Returns a new string that is a substring of this string.
(https://docs.oracle.com/javase/7/docs/api/java/lang/String.html)文字列を分割するために。
これを試してみてください:
String input = "|abc{123{asd|xyz{456{qwe";
//input length
int length= input.length();
int parts = length/3;
//three substrings
String s1 = input.substring(0, parts);
String s2 = input.substring(parts, 2*parts);
String s3 = input.substring(2*parts, length);
System.out.println("s1: "+s1+"\ns2: "+s2+"\ns3: "+s3);
Output is:
s1: |abc{123
s2: {asd|xyz
s3: {456{qwe
しかし、インデックスが不明な場合はこれを使うことはできません –
3つに分割したい長さと内容の文字列がありますか? –
はい。正しいです。 –
あなたは3つの他の人にあなたの文字列値を切り捨てるために、コードを使用しようとしている場合は、私はこれを見るでしょう:Cut Java String at a number of character。この資料では、文字列を切り捨てる方法について説明します。
我々は{
または|
のいずれかで文字列を分割する必要があることを前提とした場合、私が行ったように、あなたは類似した何かを思い付くことができます(これが最適解ではないと私はすべてのコーナーケースのためにそれをテストしたが、ここでそれしていません
public static void main(String[] args) {
String input="|abc{123{asd|xyz{456{qwe";
List<String> lettersFirst = new ArrayList<String>();/delimiter/ |
List<String> lettersSec = new ArrayList<String>();// delimiter {
List<String> numbers = new ArrayList<String>();//delimiter either { or |
char[] inputChars = input.toCharArray();
for(int i=1; i<inputChars.length;i++){
if(Character.isLetter(inputChars[i])){
if(inputChars[i-1]=='|')
lettersFirst.add(GetStringUntilDelim(inputChars, i));
else if (inputChars[i-1]=='{')
lettersSec.add(GetStringUntilDelim(inputChars, i));
}else if(Character.isDigit(inputChars[i])){
if(inputChars[i-1]=='|' || inputChars[i-1]=='{')
numbers.add(GetStringUntilDelim(inputChars, i));
}
}
//now format the final strings
String s1 = "{ ", s2 = "{ ", s3 = "{ ";
for(int i=0; i<lettersFirst.size();i++){
s1 = s1 + lettersFirst.get(i);
s1 = s1 + ",";
}
s1 = s1.substring(0,s1.length()-1);//remove the last comma
s1 = s1 +" }";
for(int i=0; i<lettersSec.size();i++){
s2 = s2 + lettersSec.get(i);
s2 = s2 + ",";
}
s2 = s2.substring(0,s2.length()-1);//remove the last comma
s2 = s2 +" }";
for(int i=0; i<numbers.size();i++){
s3 = s3 + numbers.get(i);
s3 = s3 + ",";
}
s3 = s3.substring(0,s3.length()-1);//remove the last comma
s3 = s3 +" }";
System.out.println(s1);
System.out.println(s3);
System.out.println(s2);
}
public static String GetStringUntilDelim(char[] inputChars, int index){
String s = "";
int maxIndex = inputChars.length-1;
char c;
do{
c = inputChars[index++];
s = s + c;
}while(( c != '|' && c != '{') && index <= maxIndex);
s = (index-1) == maxIndex ? s : s.substring(0,s.length()-1);
return s;
}
ouputを、それもなく文字列より、文字列の連結のためのStringBuilderを使用する方が効率的であろうと
{ abc,xyz }
{ 123,456 }
{ asd,qwe }
注)です。
String in = "|sha{1234{asd|sha1{4564{zxc";
String[] string1, number, string2;
String[] res = in.split("\\|");
string1 = new String[res.length];
number = new String[res.length];
string2 = new String[res.length];
for (int i1 = 1; i1 < res.length; i1++) {
String[] temp = res[i1].split("\\{");
string1[i1] = temp[0];
number[i1] = temp[1];
string2[i1] = temp[2];
}
for (int i = 1; i < string1.length; i++) {
System.out.println(string1[i]);
System.out.println(number[i]);
System.out.println(string2[i]);
}
OUTPUT
SHA
ASD
SHA1
ZXC
期待どおりの正しい出力ですか?もしそうなら、それは誰もあなたの元の投稿から推測できるものではないので、前に私たちに語ったことがあります。 –
あなたは、少なくともしようとしましたか? –
はい私はしました。私はsplit( "\\ |")を使って文字列を2に分割しました。出力はabc {123 {asdとxyz {456}です。 –