2

可能重复:
在 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个有效数字

我尝试使用这个问题的正则表达式解决方案,但它似乎不起作用。

甚至这个

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

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

4

2 回答 2

4

断言

每个值的大小为 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()]);
}
于 2012-11-09T17:28:57.800 回答
0

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

 while not end-of-string
   if next-char is "-"
      take next 9 chars
   else
      take next 8 chars
于 2012-11-09T17:17:50.500 回答