Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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 Method split()不使用逗号,数组超出范围_Java_Arrays_Indexing_Split - Fatal编程技术网

Java Method split()不使用逗号,数组超出范围

Java Method split()不使用逗号,数组超出范围,java,arrays,indexing,split,Java,Arrays,Indexing,Split,我试图将用户输入的地址字符串用逗号分隔。例如,如果用户输入地址 “不列颠哥伦比亚省温哥华第56大道4367号,V4K1C3” 我想要一个带值的数组 阵列[“4376”、“56大道”、“温哥华”、“不列颠哥伦比亚省”、“V4K1C3”] 指数从0到4。但是,在我的一个类中实现此功能时,当我将Array[1]的值赋给一个变量时,我会不断得到一个数组越界错误,就好像所有内容都进入数组的0索引一样。下面是我写的一个片段,说明了这个问题: import java.util.Scanner; public

我试图将用户输入的地址字符串用逗号分隔。例如,如果用户输入地址

“不列颠哥伦比亚省温哥华第56大道4367号,V4K1C3”

我想要一个带值的数组

阵列[“4376”、“56大道”、“温哥华”、“不列颠哥伦比亚省”、“V4K1C3”]

指数从0到4。但是,在我的一个类中实现此功能时,当我将
Array[1]
的值赋给一个变量时,我会不断得到一个数组越界错误,就好像所有内容都进入数组的0索引一样。下面是我写的一个片段,说明了这个问题:

import java.util.Scanner;

public class Test {
   public static void main(String[] args) {
      Scanner input = new Scanner(System.in);

  String fullAddress = input.next();

  String[] arr = fullAddress.split(",");

  System.out.println(arr[0]);
  System.out.println(arr[1]); //error java.lang.ArrayIndexOutOfBoundsException: 1
  System.out.println(arr[2]);
  System.out.println(arr[3]);
  System.out.println(arr[4]);


 }
}

这里出了什么问题?

问题是您使用的是
next()
,它使用
作为分隔符。给定输入为:

4367,不列颠哥伦比亚省温哥华第56大道,V4K1C3

使用
next()
,您将得到
fullAddress=“4367,
。拆分时,您会得到
arr=[“4367”]
,因此在
arr[1]
处会出现异常

改用
nextLine()

String fullAddress = input.nextLine();
String fullAddress = input.nextLine();
使用
nextLine()
而不是
next()

next()
只返回空格前面的内容

nextLine()
返回数据后自动向下移动扫描仪 当前行

供您输入
4367,不列颠哥伦比亚省温哥华第56大道,V4K1C3


您的
fullAddress
包含
4367,
因此在
split()
之后,您只有1项,并且您正试图访问第2个元素,因此您将获得
java.lang.arrayindexoutofbounds异常:1
问题在于
next()

因为它只读取输入,而不是行尾或输入后的任何内容。 你需要把它改成


您需要使用
nextLine()
而不是
next()
。还应使用以下正则表达式来避免空格:

String[] arr = fullAddress.split(",\\s+");

如果使用带逗号的拆分,请不要忘记在每个令牌上使用
trim()
,因为如果您有这样的标记:
“4367,56大街,温哥华,不列颠哥伦比亚省,V4K1C3”
阵列将如下所示:

array ["4376", " 56th Avenue", " Vancouver", " BC", " V4K1C3"]

如果没有
trim()

调试器告诉您FullAddress包含什么内容,则会有前导空格。^This。调试器可以在几秒钟内解决此问题;)最好使用适当的正则表达式直接拆分,以避免以后需要修剪()。看看我的答案。
String[] arr = fullAddress.split(",\\s+");
array ["4376", " 56th Avenue", " Vancouver", " BC", " V4K1C3"]