当前位置: 首页 > 知识库问答 >
问题:

如何在java或Kotlin中拆分数组?

郑波
2023-03-14

如何拆分阵列?例如,我有一个如下字符数组:

['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']

现在,我想用位置6上可以看到的空格拆分数组。拆分后数组将如下所示:

Array1 = ['H', 'e', 'l', 'l', 'o']
Array2 = ['W', 'o', 'r', 'l', 'd']

我确实在这里找到了类似的帖子,但在java或Kotlin中没有。

我知道我可以这样做:

String str = TextUtils.join(",", arr);

String[] splittedString = str.split(" ");

但是,如果可能的话,我想要另一种方式。这占用了大量内存,在大型数组上也需要大约30-40毫秒

如何使用java或静态编程语言做到这一点

共有3个答案

古棋
2023-03-14

为什么不只是

val arr = arrayOf('H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd')
val arr1 = arr.take(5).toTypedArray()// or .joinToString()
val arr2 = arr.takeLast(5).toTypedArray()// or .joinToString()

5是硬编码的,但另一种方法是使用空间索引

胡俊弼
2023-03-14

我假设有一个通用数组,其中的元素确实具有适当的对象::equals实现;对于一组字符,基于字符串操作的建议解决方案是最有效的实现。

试试这个:

final Element [] input = …
final List<Element[]> output = new ArrayList<>();
final Element split = …

var start = 0;
var end = 0;
while( end < input.length )
{
  if( input [end].equals( split ) )
  {
    output.add( Arrays.copyOfRange( input( start, end ) );
    start = end + 1;
  }
  ++end;
}
if( start < end ) output.add( Arrays.copyOfRange( input( start, end ) ) );
司徒河
2023-03-14

一个简单的解决方案是将原始数组连接到一个字符串中,按空格拆分,然后再次拆分为字符(在kotlin中):

arr.joinToString().split(" ").map{ it.split() }

这没有得到优化,但仍处于O(n)(线性复杂度)状态。它得益于可读性,这通常是首选,而如果这对您手头的任务至关重要,则应该考虑性能。

 类似资料:
  • 我已经在这里问了一个问题,但是这个问题只回答了字符串。我不能编辑它,因为那里已经有几个答案了。 现在,我明白了如何用那篇文章中给出的空格分割它。但是,我如何用像这样的自定义类对象分割它: 现在,我想在为false的地方拆分。例如,我有这个数组: 现在,如果将isAdult拆分为false,则如下所示: 那么,如何在java或静态编程语言中实现这一点

  • 问题内容: 如果我有网址。 https://graph.facebook.com/me/home?limit=25&since=1374196005 我可以获取(或拆分)参数(避免硬编码)吗? 像这样 https: /// **graph.facebook.com /// 我/家 /// {limit = 25,sincse = 1374196005}** 问题答案: 使用Android的类。 h

  • 如何从web3j库中引用数组类型?我有一个契约函数,它返回访问该契约的人的地址数组。我想把这些作为数组放到java/kotlin项目中。这是代码-

  • 我从基于apache-camel-spark的rest接口获得一个json数组作为输入。开始时,我想通过apache camels路线分割json-array来处理每个元素。我该怎么做? 我的测试输入json: 对于这个问题,我在stackoverflow上找到了一些间接描述的问题: link 1, link 2, link 3。 根据这些示例,我尝试了以下骆驼路线: 当我这样做时,我总是得到以下

  • 是的,它只显示1项。 请帮我拿到所有的,不仅仅是1

  • 我有一个字符串,,我想把它分成两个字符串: 这意味着第一个字符串将包含之前的字符,第二个字符串将包含之后的字符。我还想检查字符串中是否有。如果没有,我会抛出一个异常。我该如何做到这一点?