您的位置:首页 > 其它

scala习题九——文件和正则表达式

2015-12-22 23:33 288 查看
1.写出一个小scala程序,将某个文件中的行倒转顺序(将最后一行作为第一行,依次类推),记住要import scala.io.source

val source=Source.fromFile("D:\\text.txt","UTF-8");
var lineitrator=source.getLines().toArray;
for(i<-(0 until lineitrator.length).reverse ){
println(lineitrator(i));
}


2.编写scala程序,从一个带有制表符的文件读取内容,将每个制表符替换成一个空格,使得制表符隔开的n列仍然保持纵向对齐,并将结果写入同一个文件

def readzhibiao():Unit={
val source=Source.fromFile("D:\\text.txt","UTF-8");
var lineitrator=source.getLines();
val str=for(i<- lineitrator) yield{
i.replaceAll("\\t", " ");
}
val pw=new PrintWriter("D:\\text.txt");
str.foreach { line => pw.println(line) }
pw.close();
}


编写一小段Scala代码,从一个文件读取内容并把所有字符数大于12的单词打印到控制台。如果你能用单行代码完成会有额外奖励

Source.fromFile("D:\\text.txt","UTF-8").mkString.split("\\s+").foreach {word => if(word.length()>12) println(word); };


4.编写scala程序,从包含浮点数的文本文件读取内容,打印出文件中所有浮点数之和,平均值,最大值和最小值

def readfilefloat():Unit={
var sum=0.0;
val source=Source.fromFile("D:\\text.txt","UTF-8").mkString.split("\\s+").foreach {word => if(word.matches("\\d+\\.?\\d*")) sum=sum+word.toDouble };
println(sum);
}


编写Scala程序,向文件中写入2的n次方及其倒数,指数n从0到20。对齐各列

def write2(n:Int):Unit={
var exp=BigInt(2);
val out=new PrintWriter("D:\\text.txt");
for(i<- (1 to n)){
out.println(i+"      "+1/(exp.pow(i)));

}
out.close();
}


6.编写正则表达式,匹配Java或C++程序代码中类似”like this,maybe with \” or\”这样的带引号的字符串。编写Scala程序将某个源文件中所有类似的字符串打印出来

def readregx():Unit={
val Regx="";
val in=Source.fromFile("D:\\text.txt").mkString;

val pattern = "\\w+\\s+\"".r

pattern.findAllIn(in).foreach(println)
}


7.编写Scala程序,从文本文件读取内容,并打印出所有的非浮点数的词法单位。要求使用正则表达式

def printfloat():Unit={
val pattern="\\d+\\.?\\d*".r;
val source=Source.fromFile("D:\\text.txt").mkString
pattern.findAllIn(source).foreach { println }
}


8.编写Scala程序打印出某个网页中所有img标签的src属性。使用正则表达式和分组

scala的正则表达式分组形式是val numpattern =”([0-9]+) ([a-z]+)”.r

def printimg():Unit={
val source = Source.fromFile("D:\\text.txt").mkString;
val pattern = """<img[^>]+(src\s*=\s*"[^>^"]+")[^>]*>""".r

for (pattern(str) <- pattern.findAllIn(source)) println(str)
}


9.编写Scala程序,盘点给定目录及其子目录中总共有多少以.class为扩展名的文件

def readdir(dir:File):Iterator[File]={
//获取本目录下所有含有class的文件,并加入迭代器
val chlidren =dir.listFiles().filter(_.getName().endsWith("class"));
//像children中加入子目录下所有带有class的文件
chlidren.toIterator ++ dir.listFiles().filter(_.isDirectory()).flatMap { readdir _ }

}
var s= readdir(new File("C:\\Users\\pengchen\\workspace\\hello"));
println(s.length);


10.扩展那个可序列化的Person类,让它能以一个集合保存某个人的朋友信息。构造出一些Person对象,让他们中的一些人成为朋友,然后将Array[Person]保存到文件。将这个数组从文件中重新读出来,校验朋友关系是否完好

@SerialVersionUID(42L) class person(val name:String) extends Serializable{
private val friends=new ArrayBuffer[person]();
def addFriend(friend:person){
friends+=friend;
}
override def toString() = {
var str = "My name is " + name + " and my friends name is "
friends.foreach(str += _.name + ",")
str
}
def savefriends(friend:person){
val out=new ObjectOutputStream(new FileOutputStream("D:\\test.obj"));
out.writeObject(friend);
out.close();
}
def readfriends(){
val in = new ObjectInputStream(new FileInputStream("D:\\test.obj"));
val readfriends=in.readObject().asInstanceOf[person];
in.close();
println(readfriends);

}
override def main(args:Array[String]){
// var s= readdir(new File("C:\\Users\\pengchen\\workspace\\hello"));
// println(s.length);
// printimg();
val a=new person("a");
val b=new person("b");
val c=new person("c");
val d=new person("d");
a.addFriend(b);
a.addFriend(c);
a.addFriend(d);
println(a);
savefriends(a);
println(a);
readfriends();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: