정규식은 다음에 하겠다
java.util.Scanner클래스
Scanner는 화면, 파일, 문자열과 같은 입력소스로부터 데이터를 읽을 수 있다
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
import java.util.Scanner;
class ScannerEx1 {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
String[] argArr = null;
while(true) {
String prompt = ">>";
System.out.print(prompt);
String input = s.nextLine(); // 라인단위로 입력받음
input = input.trim(); // 입력받은 값에서 불필요한 앞뒤 공백 제거
argArr = input.split(" "); // 입력받은 내용의 공백을 구분자로 잘라서 argArr배열에 저장
String command = argArr[0].trim();
if("".equals(command)) continue;
command = command.toLowerCase();// 소문자로
if(command.equals("q"))
System.exit(0);
else {
for(int i=0; i<argArr.length; i++)
System.out.println(argArr[i]);
}
}
}
}
|
cs |
출력
>> HELLO
HELLO
>>G
G
>>Q
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
package useful;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
class ScannerEx2 {
public static void main(String[] args) throws Exception {
// txt파일은 CH09에 저장되어야함 (CH09/src/useful X)
Scanner sc = new Scanner(new File("data2.txt"));
int sum=0;
int cnt=0;
while(sc.hasNextInt()) {
sum += sc.nextInt();
cnt++;
}
System.out.println("sum="+sum);
System.out.println("average="+(double)sum/cnt);
}
}
|
cs |
출력
sum=1500
average=300.0
Scanner에서 txt파일로부터 데이터를 읽어와 합과 평군을 계산
(data2.txt에는 100 200 300 400 500이 저장되어있음)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
package useful;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class ScannerEx3 {
public static void main(String[] args) throws Exception {
Scanner sc = new Scanner(new File("data3.txt"));
int cnt = 0;
int totalSum = 0;
while(sc.hasNextInt()) {
// data3.txt에서 한줄을 가져와 line에 저장
String line = sc.nextLine();
// line에 저장된 문자열을 ","기호로 구분해서 sc2에 저장
Scanner sc2 = new Scanner(line).useDelimiter(",");
int sum=0;
while(sc2.hasNextInt()) {
sum += sc2.nextInt();
}
System.out.println(line + ", sum = " + sum);
totalSum += sum;
cnt++;
}
System.out.println("Line: " + cnt + ", Total: " + totalSum);
}
}
|
cs |
출력
100,100,100, sum = 300
200,200,200, sum = 600
300,300,300, sum = 900
400,400,400, sum = 1200
500,500,500, sum = 1500
Line: 5, Total: 4500
java.util.StringTokenizer클래스
StringTokenizer는 긴 문자열을 지정된 구분자(delimiter)를 기준으로 토큰(token)이라는 여러 개 문자열로 자르는데 사용
String의 split(String regex)이나 Scanner의 useDelimiter(String pattern)과 유사
|
1
2
|
String[] result = "100,200,300,400".split(",");
Scanner sc2 = new Scanner("100,200,300,400").useDelimiter(",");
|
cs |
StringTokenizer는 구분자로 단 하나의 문자 밖에 사용하지 못하기 때문에 보다 복잡한 형태의 구분자로 문자열을 나누어야 할 때는 정규식을 사용하는 메소드를 사용해야 함
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
import java.util.StringTokenizer;
class StringTokenizerEx1 {
public static void main(String[] args) {
String source = "100,200,300,400";
StringTokenizer st = new StringTokenizer(source, ","); // String을 ','기준으로 자름
// StringTokenizer에 토큰이 있는지?
while(st.hasMoreTokens()) {
System.out.println(st.nextToken()); // 있으면 토큰반환, 토큰이 없을때 까지 반복
}
}
}
|
cs |
출력
100
200
300
400
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
import java.util.StringTokenizer;
class StringTokenizerEx2 {
public static void main(String[] args) {
String expression = "x=100*(200+300)/2";
// true로 인해 구분자도 출력되게 함
StringTokenizer st = new StringTokenizer(expression, "+-*/=()", true);
while(st.hasMoreTokens()) {
System.out.println(st.nextToken());
}
}
}
|
cs |
출력
x
=
100
*
(
200
+
300
)
/
2
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
import java.util.StringTokenizer;
class StringTokenizerEx3 {
public static void main(String[] args) {
String source = "1,김천재,100,100,100|2,박수재,95,80,90|3,이자바,80,90,90";
// 첫번째 구분자, '|'기준으로 문자열 분리
StringTokenizer st = new StringTokenizer(source, "|");
while(st.hasMoreTokens()) {
String token = st.nextToken();
// 두번째 구분자, ','기준으로 문자열 분리 후, 출력
StringTokenizer st2 = new StringTokenizer(token, ",");
while(st2.hasMoreTokens()) {
System.out.println(st2.nextToken());
}
System.out.println("--------");
}
}
}
|
cs |
출력
1
김천재
100
100
100
--------
2
박수재
95
80
90
--------
3
이자바
80
90
90
--------
'아카이브 > 자바의 정석' 카테고리의 다른 글
| 11장 컬렉션프레임워크 20201029 (0) | 2020.10.29 |
|---|---|
| 11장 컬렉션 프레임워크 20201026 (0) | 2020.10.26 |
| 9장 java.lang패키지와 유용한 클래스 20201023 (0) | 2020.10.23 |
| 9장 java.lang패키지와 유용한 클래스 20201018 (0) | 2020.10.18 |
| 9장 java.lang패키지와 유용한 클래스 20201017 (0) | 2020.10.17 |