제1 3 강 파일 과 정규 표현 식

4727 단어
이 장 에 서 는 주로 파일 의 관련 조작 과 정규 표현 식 을 말한다.
본 장의 요점:
파일 조작
서열 화
정규 표현 식
13.1 파일 조작
13.1.1 파일 읽 기
import scala.io.Source
object Test {
  def main(args: Array[String]): Unit = {
    val source = Source.fromFile("D:\\58\\workspace\\scala-study\\src\\data.txt", "UTF-8")//              java.io.File
    val iterator=source.getLines();
    while(iterator.hasNext){
       print(iterator.next())
    }
    source.close()
  }
}

또는 교체 기 에 toArray 나 toBuffer 방법 을 적용 하여 배열 이나 배열 버퍼 에 이 줄 을 넣 을 수 있 습 니 다.
    val source = Source.fromFile("D:\\58\\workspace\\scala-study\\src\\data.txt", "UTF-8")
     var arr= source.getLines().toArray
     for(x

때로는 파일 전 체 를 문자열 로 읽 고 싶 을 때 가 있 습 니 다.
val contents=source.mkString

주의해 야 할 것 은 Source 의 대상 을 다 쓴 후에 close 를 호출 하 는 것 을 기억 하 세 요.원본 파일 의 빈 칸 으로 구 분 된 모든 단 어 를 읽 는 빠 르 고 더러 운 방법 이 있 습 니 다.
val tokens = source.mkString.split("\\S+")

URL 이나 다른 원본 에서 읽 기
Source 대상 은 비 파일 원본 을 읽 는 방법 이 있 습 니 다.
val source1 = Source.fromURL("http://horstamnn.com", "UTF-8")
val source2 = Source.fromString( "Hello, World! " ) //          ,       
 val source3 = Source.stdin //       

URL 에서 읽 을 때 문자 집합 을 미리 알 아야 합 니 다. HTTP 헤드 를 통 해 가 져 올 수 있 습 니 다.바 이 너 리 파일 을 읽 는 Scala 는 바 이 너 리 파일 을 읽 는 방법 을 제공 하지 않 았 습 니 다.자바 라 이브 러 리 를 사용 해 야 합 니 다.파일 을 바이트 배열 로 읽 는 방법:
val file = new File (filename)
 val in = new FileInputStream(file)
 val bytes = new Array[Byte](file.length.tolnt)
 in.read (bytes)
 in.close()

텍스트 파일 쓰기 Scala 는 쓰기 파일 에 대한 지원 이 없습니다.텍스트 파일 을 쓰 려 면 자바. io. PrintWriter 를 사용 하 십시오. 예 를 들 어:
    val out = new PrintWriter("numbers.txt")
    for (i 

접근 디 렉 터 리
class Test{ 
}
object Test{  
  def subDir(dir:File):Iterator[File] ={  
    val children = dir.listFiles().filter(_.isDirectory())  
    children.toIterator ++ children.toIterator.flatMap(subDir _)  
  }  
  
  def subFile(dir:File):Iterator[File] ={  
    val dirs = dir.listFiles().filter(_.isDirectory())  
    val files = dir.listFiles().filter(_.isFile())  
    files.toIterator ++ dirs.toIterator.flatMap(subDir _)  
  } 
  
  //                 
  def main(args:Array[String]):Unit = {  
      for(d 

13.2 서열 화
Serializable 특질 은 scala 패키지 에 정의 되 어 있 기 때문에 명시 적 으로 도입 할 필요 가 없습니다.결 성 된 ID 를 받 아들 일 수 있다 면 @ SerialVersionUID 주 해 를 생략 할 수도 있 습 니 다.당신 은 일반적인 방식 에 따라 대상 을 직렬 화 하고 반 직렬 화 할 수 있 습 니 다.
@SerialVersionUID(42L) class Person extends Serializable{
  private var name:String="";
}

13.3 정규 표현 식
입력 을 처리 할 때 정규 표현 식 으로 분석 하려 고 합 니 다.scala. util. matching. Regex 류 는 이 일 을 간단하게 만 들 었 다.Regex 대상 을 만 들 려 면 String 류 의 r 방법 을 사용 하면 됩 니 다.
val numPattern="[0-9]+ ".r

정규 표현 식 에 역 슬 래 쉬 나 따옴표 가 포함 되 어 있다 면 '원본' 문자열 문법 을 사용 하 는 것 이 좋 습 니 다.예 를 들 면:
val wsnumwsPattern = """\s+[0-9]+\s+""".r //  "\\s+[0-9]+\\s+".r        

findAllln 방법 은 일치 하 는 모든 항목 을 옮 겨 다 니 는 교체 기 를 되 돌려 줍 니 다.for 순환 에서 사용 할 수 있 습 니 다:
for ( matchString 

또는 교체 기 를 배열 로 변환 합 니 다:
val matches = numPattern.findAllln("99 bottles, 98 bottles").toArray // Array(99, 98)

문자열 의 첫 번 째 일치 하 는 항목 을 찾 으 려 면 find Firstln 을 사용 하 십시오.당신 이 얻 은 결 과 는 Option [String] 입 니 다.
val ml = wsnumwsPattern.findFirstln("99 bottles, 98 bottles") //Some("98")

어떤 문자열 의 시작 부분 이 일치 하 는 지 확인 하려 면 findPrefixOf 를 사용 하 십시오.
numPattern.findPreflxOf("99 bottlesf 98 bottles") //Some(99)
wSnumwsPattern.findPrefixOf("99 bottles, 98 bottles") // None

첫 번 째 일치 항목 이나 모든 일치 항목 을 바 꿀 수 있 습 니 다:
numPattern.replaceFirstln("99 bottles, 98 bottles", "XX") 
// "XX bottles, 98 bottles"
numPattern. replaceAllIn("99 bottles, 98 bottles", "XX") 
// "XX bottles, XX bottles"

정규 표현 식 그룹
그룹 을 나 누 면 정규 표현 식 의 하위 표현 식 을 편리 하 게 가 져 올 수 있 습 니 다.추출 하고 싶 은 하위 표현 식 양쪽 에 괄호 를 붙 입 니 다. 예 를 들 어:
val numitemPattern = " ([0-9]+) ([a-z]+) ".r

그룹 과 일치 하려 면 정규 표현 식 대상 을 '추출 기' 로 사용 할 수 있 습 니 다. 이렇게:
val numitemPattern (num, item) = "99 bottles" 
//  num  "99",item  "bottles"

여러 일치 하 는 항목 에서 그룹 내용 을 추출 하려 면 이렇게 for 문 구 를 사용 할 수 있 습 니 다.
for (numitemPattern (num,item) 

좋은 웹페이지 즐겨찾기