Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 所有行打印都很好,但越界错误_Java - Fatal编程技术网

Java 所有行打印都很好,但越界错误

Java 所有行打印都很好,但越界错误,java,Java,我有一个字符串数组,其中包含以下三行关于用户名、密码和访问类型的信息: String alluser=“ckent 0123456789 u 艾薇儿0123456789 u jlati 0123456789 a“ 尽管我可以在数组中循环并打印出所有信息,但仍然收到一个错误java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:76 下面是我的代码: String[] usersArray = allUsers.split(" "); for (i

我有一个字符串数组,其中包含以下三行关于用户名、密码和访问类型的信息:

String alluser=“ckent 0123456789 u
艾薇儿0123456789 u
jlati 0123456789 a“

尽管我可以在数组中循环并打印出所有信息,但仍然收到一个错误
java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:76

下面是我的代码:

String[] usersArray = allUsers.split(" ");

for (int x = 0; x < usersArray.length-1; x++){

    //gets all user information per line.                    
    String userList = allUsers.substring(0+(19*x), 19+(19*x));

    //gets only the username for all three users                             
    String username = userList.substring(0,5);

    //gets only the password for all three users
    String password = allUsers.substring(6+(19*x),16+(19*x));

    //gets only the access type for all three users
    String accesstype = allUsers.substring(17+(19*x),19+(19*x));

    System.out.print(x);                            
    System.out.println(userList);


}
String[]usersArray=alluser.split(“”);
对于(int x=0;x

是否有其他方法可以做到这一点而不产生边界错误?

用户数组将包含9个条目。因为反斜杠已经写了,所以当
x
大于3时,您的代码会失败。

您的方法很危险。既然您使用了
.split()
,您应该知道它能做什么。如果您的输入字符串是这种形式的(我假设在这些“u”之后有一个空格)(此时不清楚)

您应该使用所使用的
.split(“”;
。现在,如果使用该方法,您将获得一个字符串元素数组。下面是使用
allUsers.split(“”)的结果示例

你在这里看到模式了吗?对于每3个步骤,你都有你的数据。然后是一个简单的For循环(其中
arr
是上面的数组):

然后在第一个循环结束时,
i
变为3,因为
i+=3
。因此您得到第二个循环,因为
(i+2)
仍然为真

String name = arr[3]; // i = 3 -> gives "avril"
String pw = arr[3+1]; // i = 4 -> gives "0123456789"
String access = arr[3+2]; // i = 5 -> gives "u"

依此类推,直到
(i+2)
变为false。

拆分字符串后,无需再次使用子字符串

希望下面的代码片段会有所帮助:

 String allUsers = "ckent 0123456789 u avril 0123456789 u jlati 0123456789 a";

    String[] split = allUsers.split(" ");
    for (int i = -1; i < split.length - 3; ) {
        System.out.print(split[++i]);
        System.out.print(" "+split[++i]);
        System.out.print(" "+split[++i]);
        System.out.println();

    }
String alluser=“ckent 0123456789 u avril 0123456789 u jlati 0123456789 a”;
String[]split=alluser.split(“”);
对于(int i=-1;i
String userList=alluser.substring(0+(19*x),19+(19*x));
->
0+(19*x)
yelds
76
x=4
时。为什么要将子字符串与这些索引一起使用?您试图实现什么?为什么在已拆分数组时使用子字符串。我想您可能要使用的是RegEx。您的输入字符串
allUsers
格式不正确,因此很难提取单个组件。您是如何得到这些数据的?包含三行,不,代码在三行上,但字符串在一行上。您介意在字符串中添加
\n
,从那里,您可以读取每一行,并使用
拆分该行。“”
在数组中分隔每个字段。不需要子字符串。@AxelH实际上我们不知道这一点。以OP编写的方式声明字符串的代码将永远无法编译,因此我们不知道他是如何声明的,以及它是否真的包含更多行或仅包含一行。但这并不能回答问题。有其他方法可以这样做吗I don’我不会得到一个越界的错误吗?—老实说,我不认为我们能够在不知道OP想要实现什么的情况下正确回答这个问题。感谢各位的评论。也许我应该简单解释一下我想要实现的目标。我正在从文本文件中读取用户信息。当用户登录时,登录()函数将检查所有用户,并在成功身份验证之前匹配文本文件中的用户名、密码和访问类型。我希望这是清楚的。感谢各位的评论。也许我应该简要说明我试图实现的目标。我正在从文本文件中读取用户信息。当用户登录时,登录()函数将检查所有用户,并在成功身份验证之前匹配文本文件中的用户名、密码和访问类型。我希望这是清楚的。
for(int i = 0; (i + 2) < arr.length; i += 3) {
    String name = arr[i]; // i = 0, 3, 6
    String pw = arr[i+1]; // i = 1, 4, 7
    String access = arr[i+2]; // i = 2, 5, 8
}
String name = arr[0]; // i = 0 -> gives "ckent"
String pw = arr[0+1]; // i = 1 -> gives "0123456789"
String access = arr[0+2]; // i = 2 -> gives "u"
String name = arr[3]; // i = 3 -> gives "avril"
String pw = arr[3+1]; // i = 4 -> gives "0123456789"
String access = arr[3+2]; // i = 5 -> gives "u"
 String allUsers = "ckent 0123456789 u avril 0123456789 u jlati 0123456789 a";

    String[] split = allUsers.split(" ");
    for (int i = -1; i < split.length - 3; ) {
        System.out.print(split[++i]);
        System.out.print(" "+split[++i]);
        System.out.print(" "+split[++i]);
        System.out.println();

    }