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

正規表現の優れたアプリケーションではありませんIMHO:

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