자바기반인 안드로이드의 문자열을 다룰때 사용할 스트링 클래스들 입니다.
스트링 클래스에는 문자열을 분석하거나 조작하기 위한 몇가지 기본 메서드를 지원한다.
<length() 메서드>
String a = "ABC";
int len = a.length();
이것은, 문자열의 길이를 구해준다.
재미있는 점은, 한글이나 영문,숫자등을 모두 한글자를 1 로 계산한다는 것이다.
String a = "ab";
String b = "가나";
System.out.println(a.length());
System.out.println(b.length());
위와같이 영어 두글자와 한글 두글자의 길이를 출력시키면, 모두 2 라는 똑같은 값이 나온다.
즉, 바이트 기준이 아니라, 문자 기준이라는 것이다.
일부, 프로그램에서 한글의 경우 2배수가 나오는 것에 비하면 꽤나 편리한 편이다.
<substring() 메서드>
substring() 메서드는 자바스크립트나 php 에서와 동일하게 문자열의 일부를 가져오는 것이다.
String a = "ABCDEF";
String b = a.substring(2, 5); //2번 이후부터 5번 전까지 가져옴 (CDE 를 가져옴)
역시, 주의할점은, 처음 시작이 0 번 부터라는 것이다.
즉, A=0, B=1, C=2, D=3, E=4, F=5
가 되고, 2번부터라면, C 부터 시작함을 의미하고, 5번 전까지이기 때문에 E 까지 가져온다.
String a = "abcdef";
String b = "가나";
String c = new String();
c = a.substring(2,5);
System.out.println(c); // 'cde' 출력
String d = new String();
d = b.substring(1,2); //'나' 출력
System.out.println(d);
위의 출력 예를 보면 이해가 쉽다.
자바나, php 등을 오래 한사람은 substring 가 익숙하겠지만,
ASP 의 Mid 나 substr 같은 용법에 익숙한 사람은 아무래도 헷갈리는데,
아쉽게도 자바에는 기본적으로 substr 메서드가 없다.
<compareTo() 메서드>
메서드 이름에서 알 수 있듯이, 이는 두 문자열을 비교하는 메서드이다.
public class a
{
public static void main(String [] args){
String a = "ABC";
String b = "ABC";
String c = "BCD";
String x = "B";
int d = a.compareTo(b);
int e = a.compareTo(c);
System.out.println(d); //0 출력
System.out.println(e); //-1 출력
int y = a.compareTo(x);
System.out.println(y); //-1 출력
int w = x.compareTo(a);
System.out.println(w); //1 출력
}
}
즉, a 와 b 를 비교했을때, 완전히 일치하기 때문에 0 을 반환하였고,
a 와 c 를 비교했을때, 부분적으로는 비슷한 문자가 들어있지만, 문자열 전체를 봤을때는 일치하지 않으므로, -1 을 반환한다.
(-1 은 전혀 다르다는 것을 의미)
그런데, 특이한 점은(주의) 어느것을 기준으로 비교하느냐에 따라 값이 차이가 난다는 것이다.
a.compareTo(b)
라는 문법은, b 에다가 a 문자열을 대조해보는 것으로, 기준이 되는 것이 괄호안에 들어 있는 b 문자열이다.
따라서,
x="B" 에다가 a="ABC" 를 비교하면, 어느곳에도 일치하지 못하기 때문에 -1 이 반환되지만,
a="ABC" 에다가 x="B" 를 비교하면, 문자 B 가 두번째에 위치하고 있기 때문에(0부터 시작해서 1위치),
결과값이 1 이 반환되는 것이다.
테스트를 통해서도 보았지만, 어느것을 기준으로 비교하는지 헷갈리지 않도록 주의해야 하며,
대체로는 지정한 문자열이 대상 문자열에 들어 있는지 또는 두 문자열이 똑같은지 정도로만 체크하는 용도로 주로 사용된다.
<StringTokenizer() 클래스>
StringTokenizer 클래스는 문자열을 분할하는 클래스이다.(분할한 문자열을 토큰이라고 부른다)
이것은 자바스크립트, PHP 의 split 와 비슷한 기능을 하는 클래스이다.
사용 방법은 아래와 같다.
StringTokenizer a = new StringTokenizer("i,love,cat", ",");
이것은 'i,love,cat' 라는 문자열을 콤마(,) 를 기준으로 분할한다는 의미이다.
이렇게 분할해서, 만약 분할이 되면(토큰이 있으면) true 를 반환한다.
그러면, nextToken() 메서드를 이용해 하나씩 불러올 수 있다.
사용예시)
<a.java 의 내용>------------------------------
import java.util.*;
public class a
{
public static void main(String [] args){
StringTokenizer msg = new StringTokenizer("i,love,you", ",");
//만약, 토큰의 분할 방법을 기술하지 않으면 공백을 기본으로 하여 구분한다.
// StringTokenizer("i love you"); 와 같이 사용 가능.
String a="",b="",c="";
//System.out.println(msg);
/* 아래와 같이 직접 지정할 수 있다.
a = msg.nextToken();
b = msg.nextToken();
c = msg.nextToken();
String x = a + b + c; //iloveyou 출력
System.out.println(x);
*/
String x = new String();
//x = msg.nextToken(); //이 부분은 써도되고, 안써도 상관없다.
while(msg.hasMoreTokens()){ //토큰이 없을때까지 반복한다.
x = x + msg.nextToken();
}
System.out.println(x); //iloveyou 출력
}
}
--------------------------------------------
주의할점은, StringTokenizer 클래스를 사용하기 위해서는 java.util 을 임포트 해야 한다는 것이다.
// 좌표관련들..
getWidth()랑 getHeight()로 전체 좌표값을 얻어오고 %로 비율 정해서 좌표값 설정하세요
[출처] - http://winchester.tistory.com/tag/%EB%B0%B1%EA%B7%B8%EB%9D%BC%EC%9A%B4%EB%93%9C%20%EC%83%89%20%EB%B3%80%EA%B2%BD