StringBuffer클래스 & StringBuilder클래스
String클래스는 인스턴스를 생성할 때 지정된 문자열을 변경할 수 없지만,
StringBuffer클래스는 변경이 가능하다.
내부적으로 문자열 편집을 위한 버퍼(buffer)를 가지고 있으며,
StringBuffer인스턴스를 생성할 때 그 크기를 지정할 수 있다.
StringBuffer클래스의 인스턴스를 생성할 때, 적절한 길이의 char형 배열이 생성되고, 이 배열은 문자열을 저장하고 편집하기 위한 공간(buffer)으로 사용된다.
public class StringBufferTest {
public static void main(String[] args) {
String str = "a";
str += "b";
str += "c";
str += "d";
str += "e";
str.concat("f");
System.out.println(str);
StringBuffer sb = new StringBuffer("a");
sb.append("b");
sb.append("c").append("d").append("e"); // method chaining
sb.append("f");
System.out.println(sb);
System.out.println(str.equals(sb.toString()));
}
}
멀티쓰레드로 작성된 프로그램이 아닌 경우, StringBuffer의 동기화는 불필요하게 성능만 떨어뜨리게 된다.
그래서 StringBuffer에서 쓰레드의 동기화만 뺀 StringBuffer가 새로 추가되었다.
StringBuffer도 충분히 성능이 좋기 때문에 성능향상이 반드시 필요한 경우를 제외하고는 기존에 작성한 코드에서 StringBuffer를 StringBuilder로 굳이 바꿀 필요는 없다.
public class StringMethodEx {
public static void main(String[] args) {
String str = "https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=1&ie=utf8&query=%EA%B3%A0%EC%96%91%EC%9D%B4";
String protocol = str.substring(0, str.indexOf(":"));
String domain = str.substring(str.indexOf("://") + 3, str.indexOf("/", str.indexOf("://") + 3));
String fileName = str.substring(str.lastIndexOf("/") + 1, str.indexOf("?"));
String parameters = str.substring(str.indexOf("?") + 1);
System.out.println(protocol);
System.out.println(domain);
System.out.println(fileName);
System.out.println(parameters);
String[] params = parameters.split("&");
System.out.println(Arrays.toString(params));
for(String s : params) {
System.out.println("key : " + s.split("=")[0]);
System.out.println("value : " + s.split("=")[1]);
}
}
}
래퍼(wrapper) 클래스
객체간의 비교가 필요할 때 등등의 경우에는 기본형 값들을 객체로 변환하여 작업을 수행해야 한다.
이 때 사용되는 것이 래퍼(wrapper) 클래스이다.
8개의 기본형을 대표하는 8개의 래퍼클래스가 있는데, 이 클래스들을 이용하면 기본형 값을 객체로 다룰 수 있다.
public class WrapperTest {
public static void main(String[] args) {
int i = 10;
Integer integer = new Integer(20);
System.out.println(i + integer);
// i.
// integer.
System.out.println(Integer.toBinaryString(-1));
System.out.println(Integer.MAX_VALUE);
System.out.println(Integer.MIN_VALUE);
System.out.println(Long.SIZE);
System.out.println(Long.BYTES);
Integer i2 = 20;
Integer i3 = new Integer(20);
System.out.println(i2.equals(i3));
System.out.println(i2 == i3);
System.out.println("=========");
// long String
long l = 10;
String s = l + "";
l = Long.parseLong(s);
char[] c = s.toCharArray();
char r = (char)Integer.parseInt(s);
System.out.println(c);
System.out.println((int)r);
}
}
이미지맵
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<img src="images/kids.jpg" usemap="#favorites">
<map name="favorites">
<area shape="circle" coords="85, 105, 100" href="https://cafe.naver.com" target="_blank">
<area shape="poly" coords="10, 10, 380, 200, 380, 10" href="https://www.google.co.kr">
<area shape="rect" coords="220, 10, 380, 200" href="https://www.facebook.com" target="_blank">
</map>
</body>
</html>
저거를 다 외우고 있는 것은... 무리!!!
그래서 간단하게 할 수 있는 방법!!
밑에 있는 링크를 통해 이미지에 넣고 싶은 이미지맵의 좌표를 알려준다잉
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=aaaahana&logNo=220507533473
댓글