Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.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
字符串数组中SCALA中的空值-ArrayIndexOutOfBoundsException_Scala_Indexoutofboundsexception - Fatal编程技术网

字符串数组中SCALA中的空值-ArrayIndexOutOfBoundsException

字符串数组中SCALA中的空值-ArrayIndexOutOfBoundsException,scala,indexoutofboundsexception,Scala,Indexoutofboundsexception,我有一个字符串数组,如下所示: res17: Array[String] = Array(header - skip me, blk1|X|||||, a|b|c||||, d|e|f||||, x|y|z||||, blk2|X|||||, h|h|h|h|h|h|h, j|j|j|j|j|j|j, k|k|k|k|k|k|k, m|m|m|m|m|m|m, blk3|X|||||, 7|7|||||) 这是通过SCALA程序实现的,而不是通过SCALA实现的: for (line <

我有一个字符串数组,如下所示:

res17: Array[String] = Array(header - skip me, blk1|X|||||, a|b|c||||, d|e|f||||, x|y|z||||, blk2|X|||||, h|h|h|h|h|h|h, j|j|j|j|j|j|j, k|k|k|k|k|k|k, m|m|m|m|m|m|m, blk3|X|||||, 7|7|||||)
这是通过SCALA程序实现的,而不是通过SCALA实现的:

for (line <- Source.fromFile(filename).getLines().drop(1).toVector) {
   val values = line.split("\\|").map(_.trim)
...
也就是说,如果管道之间没有任何东西,它就会失效

getOrElse没有帮助,在检索或保存时如何替换“null”?无法从文档中查看。一定很简单

注意我只使用SCALA,而不是SPARK/SCALA。


提前谢谢

好吧,这不是我正在经历的行为。这是一个截图,我可能正在做一些不同的事情:

无论如何,如果要清除空值,可以运行如下过滤器:

val values = s.split("\\|").map(_.trim).filterNot(_.isEmpty)
如果您不想摆脱,但想将其转换为其他内容,您可以运行:

val values = s.split("\\|").map{x => val trimmed = x.trim; if (trimmed.isEmpty) None else Some(trimmed)}
编辑

val values = s.split("\\|").map{x => if (x == null) "" else x.trim}
编辑(再次):

我终于可以复制它了,很抱歉给您带来不便,我误解了一些事情。问题在于拆分函数,它默认删除空值。您应该将第二个参数传递给split函数,如中所述


嗯,这不是我所经历的行为。这是一个截图,我可能正在做一些不同的事情:

无论如何,如果要清除空值,可以运行如下过滤器:

val values = s.split("\\|").map(_.trim).filterNot(_.isEmpty)
如果您不想摆脱,但想将其转换为其他内容,您可以运行:

val values = s.split("\\|").map{x => val trimmed = x.trim; if (trimmed.isEmpty) None else Some(trimmed)}
编辑

val values = s.split("\\|").map{x => if (x == null) "" else x.trim}
编辑(再次):

我终于可以复制它了,很抱歉给您带来不便,我误解了一些事情。问题在于拆分函数,它默认删除空值。您应该将第二个参数传递给split函数,如中所述


需要保留它们,我会尝试。getOrElse似乎不能像我想的那样工作。一旦你把空值设为None或Some(无论什么),你就可以使用getOrElse,而不是之前。所以在我的第二个例子中,你可以使用这个函数,但它似乎对我不起作用,我在s附近没有引号。我在scala的databricks上试过,没有发现任何引用。所以,不,我不明白为什么这里有空值,但是检查我的编辑,它会将所有空值转换为空字符串。你能试试我的编辑代码吗?效果更好吗?val values=s.split(“\\\\”).map{x=>if(x==null)”“else x.trim}无论如何,是的,如果您可以提供更多信息,它将是有用的。需要保留它们,请尝试。getOrElse似乎不能像我想的那样工作。一旦你把空值设为None或Some(无论什么),你就可以使用getOrElse,而不是之前。所以在我的第二个例子中,你可以使用这个函数,但它似乎对我不起作用,我在s附近没有引号。我在scala的databricks上试过,没有发现任何引用。所以,不,我不明白为什么这里有空值,但是检查我的编辑,它会将所有空值转换为空字符串。你能试试我的编辑代码吗?效果更好吗?val values=s.split(“\\\\”).map{x=>if(x==null)”“else x.trim}无论如何,是的,如果您能提供更多信息,它将是有用的