【问题标题】:Split String by length in java [duplicate]在java中按长度拆分字符串[重复]
【发布时间】:2012-10-30 01:11:39
【问题描述】:

可能重复:
Split string to equal length substrings in Java

我有一个 String[] 数据结构,是这样的

0.1953601.3675211.3675214.1025640.5860811.36752110.3540903.711844-5.2747252.539683

我想把它拆分成这样的数组

  0.195360
  1.367521
  1.367521
  4.102564
  0.586081
  1.367521
 10.354090
  3.711844
 -5.274725
  2.539683

所以小数点后有6位有效数字

我尝试使用来自this question 的正则表达式解决方案,但它似乎不起作用。

这个

System.out.println(Arrays.toString(
  "Thequickbrownfoxjumps".split("(?<=\\G.{4})")
));

给我一​​个[Theq, uickbrownfoxjumps] 的输出,而不是[Theq, uick, brow, nfox, jump, s] 我期望的输出。

【问题讨论】:

  • @SeanPatrickFloyd 是的,我在问题本身中解决了这个问题。那里提供的解决方案似乎不起作用
  • 或者使用我的 Guava-Answer:stackoverflow.com/a/3760862/342852
  • 请考虑我的建议,以更正您对项目长度的断言

标签: java android


【解决方案1】:

断言

每个值的大小为 8,但如果值为负,则为 9

问题是错误的,因为如果我在这里手动拆分条目是结果:

0.195360
1.367521
1.367521
4.102564
0.586081
1.367521
10.35409
03.71184   <<< As you can see, it's not that you want
4-5.2747   <<< It's not a number
252.5396
83         <<< Bang! too short

我假设真正的断言是“点后的位数是 6”,在这种情况下拆分变为:

  0.195360
  1.367521
  1.367521
  4.102564
  0.586081
  1.367521
 10.354090
  3.711844
 -5.274725
  2.539683

代码在这里:

static String[] split( String in ) {
   List< String > list = new LinkedList< String >();
   int dot = 0;
   for( int i = 0; dot > -1 && i < in.length(); i = dot + 7 ) {
      dot = in.indexOf( '.', i );
      if( dot > -1 ) {
         int last = Math.min( dot + 7, in.length());
         list.add( in.substring( i, last ));
      }
   }
   return list.toArray( new String[list.size()]);
}

【讨论】:

  • 假设可能不正确,例如1.367521->10.354090 可能是1.3675211->0.354090。但我也相信通过点后面的数字来猜测是最合理的逻辑。 [+1]
  • @Aubin 您的假设可能是正确的。它的脑电图数据,所以它可能是你描述它的方式。我刚拿到文本文件,我得去实验室检查原始数据。但是关于代码,我收到了一个关于linkedlist的错误,它说''运算符不允许低于1.7的源级别
  • 并且由于我在 android 中工作,如果我更改级别,它会说 Android 需要编译器合规级别 5.0 或 6.0。改为找到“1.7”
  • 是的,我的答案是 Java 1.7,我会编辑它以在 6 中编译
  • @Aubin 是的,我已经解决了这个问题。但是程序仍然崩溃。现在不是因为同样的错误
【解决方案2】:

恕我直言,这不是一个很好的正则表达式应用:

 while not end-of-string
   if next-char is "-"
      take next 9 chars
   else
      take next 8 chars

【讨论】:

  • 由于规范错误,它不起作用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-05
  • 1970-01-01
  • 2012-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-14
相关资源
最近更新 更多