public static String randomRealisticUnicodeString(Random r,int minLength,int maxLength){
  final int end=nextInt(r,minLength,maxLength);
  final int block=r.nextInt(blockStarts.length);
  StringBuilder sb=new StringBuilder();
  for (int i=0; i < end; i++)   sb.appendCodePoint(nextInt(r,blockStarts[block],blockEnds[block]));
  return sb.toString();
}

public static String randomRealisticUnicodeString ( Random r , int minLength , int maxLength ) { final int end = nextInt ( r , minLength , maxLength ) ; final int block = r . nextInt ( blockStarts . length ) ; StringBuilder sb = new StringBuilder ( ) ; for ( int i = 0 ; i < end ; i ++ ) sb . appendCodePoint ( nextInt ( r , blockStarts [ block ] , blockEnds [ block ] ) ) ; return sb . toString ( ) ; }
returns random string of length between min and max codepoints , all codepoints within the same unicode block .
