import java.nio.CharBuffer;
import java.util.Random;
import java.util.Scanner;
public class RandomWords implements Readable{ /**
* @param args
*/
private static Random rand = new Random(47);
private static final char [] capitals = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray();
private static final char [] lowers ="abcdefghijklmnopqrstuvwxyz".toCharArray();
private static final char [] vowels = "aeiou".toCharArray();
private int count;
public RandomWords(int count){
this.count = count;
}
public int read(CharBuffer cb){ if(count--==0)
return -1;
cb.append(capitals[rand.nextInt(capitals.length)]);
for(int i=0;i<4;i++){
cb.append(vowels[rand.nextInt(vowels.length)]);
cb.append(lowers[rand.nextInt(lowers.length)]);
}
cb.append(" ");
return 10;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner s = new Scanner(new RandomWords(10));
while(s.hasNext()){
System.out.println(s.next());
} }
}//public int read(CharBuffer cb)为什么会被调用,被谁调用的.
import java.util.Random;
import java.util.Scanner;
public class RandomWords implements Readable{ /**
* @param args
*/
private static Random rand = new Random(47);
private static final char [] capitals = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray();
private static final char [] lowers ="abcdefghijklmnopqrstuvwxyz".toCharArray();
private static final char [] vowels = "aeiou".toCharArray();
private int count;
public RandomWords(int count){
this.count = count;
}
public int read(CharBuffer cb){ if(count--==0)
return -1;
cb.append(capitals[rand.nextInt(capitals.length)]);
for(int i=0;i<4;i++){
cb.append(vowels[rand.nextInt(vowels.length)]);
cb.append(lowers[rand.nextInt(lowers.length)]);
}
cb.append(" ");
return 10;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner s = new Scanner(new RandomWords(10));
while(s.hasNext()){
System.out.println(s.next());
} }
}//public int read(CharBuffer cb)为什么会被调用,被谁调用的.
解决方案 »
- 如何截取这个字符串
- 开发java程序时数据库一般用哪一种数据库?
- 团结就是力量 我不认输 进者给分 免费放送经典的娱乐搞笑 各位兄弟姐妹 你们辛苦了 工作之余 记得休息哦
- 菜问题,关于 javac
- FileDialog文件保存对话框中如何获取到用户自定义输入的文件名啊?
- 如何用java进行选择性删除文件?
- 目录名最后有个空格 无法删除 知道怎么删除的请来帮忙
- 在调用notes的library时,遇到如下的错误
- 请教几个问题
- 菜鸟问题
- JAVA通过JNI来调来一个VC写的DLL,此DLL显示一个含有activeX控件的对话框,死活就是显示不出来。而用另一个VC写的程序去调用此DLL时,就能够显示出来此对话框,请问是何原因?
- jdbTextField 组件的方法
Yazeruyac
Fowenucor
Goeazimom
Raeuuacio
Nuoadesiw
Hageaikux
Ruqicibui
Numasetih
Kuuuuozog
Waqizeyoy
没仔细看你的程序到底干什么的,你只要在read()方法中添加如下代码块: try{
throw new Exception("test");
}catch(Exception e){
e.printStackTrace();
}测试一下方法的调用堆栈就知道怎么调用的了.
构造一个新的 Scanner,它生成的值是从指定源扫描的。首先查看
Scanner类,发现它的构造函数可以接收一个实现了Readable接口的类的对象.
然后当你使用了s.next()的时候就会调用Readable接口的public int read(CharBuffer cb)这个方法,这些算是JDK里的,如果你想要更深入去理解可以看看JDK的源代码.
相对的线程中有一个Runnable接口,它里边有一个run()方法,某个AA实现了Runnable接口,就可以new Thread(new AA());去启动一个线程,然后这个线程就会调用AA中的run方法."你想使用我(Scanner ),那么请你按照我的规则来做(实现接口Readable),我肯定会调用这个接口中的方法(public int read(CharBuffer cb))"
import java.nio.CharBuffer;
import java.util.Random;
import java.util.Scanner;
import java.io.StringReader;
import java.io.File;public class RandomWords implements Readable{ /**
* @param args
*/
private static Random rand = new Random(47);
private static final char [] capitals = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray();
private static final char [] lowers ="abcdefghijklmnopqrstuvwxyz".toCharArray();
private static final char [] vowels = "aeiou".toCharArray();
private int count;
public RandomWords(int count){
this.count = count;
} public int read(CharBuffer cb){ if(count--==0)
return -1;
cb.append(capitals[rand.nextInt(capitals.length)]);
for(int i=0;i <4;i++){
cb.append(vowels[rand.nextInt(vowels.length)]);
cb.append(lowers[rand.nextInt(lowers.length)]);
}
cb.append(" ");
return 1;
} public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
Scanner s = new Scanner(new RandomWords(10));
while(s.hasNext()){
System.out.println("121212");
System.out.println(s.next());
}
RandomWords rw = new RandomWords(5);
Scanner s1 = new Scanner(new StringReader(String.valueOf(capitals))); //从指定源自动扫描
while(s1.hasNext()){
System.out.println("*****");
System.out.println(s1.next());
} Scanner s2 = new Scanner(new File("TestStudent.java")); //它去自动地扫描文件
while(s2.hasNext()){
System.out.println(s2.next());
} }
}