字符串数组中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}无论如何,是的,如果您能提供更多信息,它将是有用的