제1 3 강 파일 과 정규 표현 식
본 장의 요점:
파일 조작
서열 화
정규 표현 식
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)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.