所以我有一个字符串,我在子字符串中分裂。这些子串中的每个子串都应该成为新String数组的元素。
到目前为止,我有这个:public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
InputStreamReader isr = new InputStreamReader (System.in);
BufferedReader in = new BufferedReader (isr);
System.out.println("String: ");
String s = in.readLine();
String [] rij = new String [s.length()];
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == ' ' || i==0){
String temp = s.substring(i,s.indexOf(' ',i+1));
rij [i] = temp;
}
}
如果我输入的是:“Hello World”。 我的String数组应该成为{Hello,World。}
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -33
at java.lang.String.substring(String.java:1911)
at CyclischPermuteren.main(CyclischPermuteren.java:34)
我不知道如何解决这个问题,因为我无法弄清楚我应该使用什么作为我的String数组的长度,因为需要进行的子串数量是未知的,需要在静态中使用该字符串数组方法稍后。
答案 0 :(得分:2)
因为当i
等于s.length()-1
(您的循环条件中的最后一个元素)时,您正试图获得substring
s
的{{1}}这基本上(此时)i+1
超出范围。
这是因为如果一个数组大小为10,那么它的最后一个元素是9(因为它从0开始)。因此,如果您尝试访问s.length()
,那么您尝试访问(在我的示例中)数组中的第10项,结尾为9。
答案 1 :(得分:0)
你不能使用String方法split()
?
String[] parts = s.split("");
System.out.println(parts[0]);
System.out.println(parts[1]);
答案 2 :(得分:0)
容易做到!
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
InputStreamReader isr = new InputStreamReader (System.in);
BufferedReader in = new BufferedReader (isr);
System.out.println("String: ");
String s = in.readLine();
String [] rij = s.split(" "); // asumming split should be done on spaces.
}
查看String的split方法
答案 3 :(得分:0)
我认为您尝试做的是:
String[] rij = new String[s.length()];
int j = 0; // To keep index in the array
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) != ' ') { // When is not space, add character to 'temp'
temp += s.charAt(i);
}
else { // If it is space, add temp to array and reset 'temp'
rij[j++] = temp;
temp = "";
}
}
rij[j] = temp; // Add last word
for (String s1: rij)
if (s1 != null)
System.out.println(s1);
<强>输出:强>
String:
Welcome to StackOverflow, user3173758
Welcome
to
StackOverflow,
user3173758
注意:
由于您正在创建一个具有最大长度的数组rij
,因此您获得了一些null
。如果您想避免这种情况,可以尝试使用ArrayList
及其add()
方法。请在this link中了解详情。