안드로이드 dialog, custom dialog 다이얼로그





결과

초기 화면

다이얼로그

커스텀 다이얼로그






Main Layout 코드

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/holo_orange_light"
    android:gravity="center"
    android:orientation="vertical">

    <Button
        android:id="@+id/button3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="30dp"
        android:background="@drawable/text_style"
        android:onClick="dialog"
        android:text="다이얼로그"
        android:textSize="24sp" />

    <Button
        android:id="@+id/button4"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/text_style"
        android:onClick="custom_dialog"
        android:text="커스텀 다이얼로그"
        android:textSize="24sp" />
</LinearLayout>






Custom Dialog Layout


파일 생성

ㄴ 커스텀 dialog의 보여줄 layout을 만들어주기 위하여 파일을 하나 생성한다.




만든 다이얼로그 레이아웃


 



Custom Dialog Layout 코드

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#00FFFFFF"
    android:orientation="vertical">

    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/text_style"
        android:gravity="center"
        android:text="- 확 인 -"
        android:textSize="30sp"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@android:color/holo_blue_light"
        android:gravity="center"
        android:paddingTop="15dp"
        android:paddingBottom="15dp"
        android:text="결제하시겠습니까?"
        android:textSize="30sp" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal">

        <Button
            android:id="@+id/ok_btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:background="@drawable/btn_empty"
            android:text="확 인"
            android:textSize="18sp" />

        <Button
            android:id="@+id/cancle_btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:background="@drawable/btn_empty"
            android:text="취 소"
            android:textSize="18sp" />
    </LinearLayout>
</LinearLayout>







Main Java 코드

package com.example.testapp;

import androidx.appcompat.app.AppCompatActivity;

import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void dialog(View v) {
        AlertDialog.Builder builder = new AlertDialog.Builder(v.getContext());
        builder.setTitle("알림창");
        builder.setMessage("전달할 메세지");
        builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(getApplicationContext(), "OK 버튼을 눌렀습니다.", Toast.LENGTH_LONG).show();
            }
        });
        builder.setNegativeButton("Cancle", null);
        builder.show();
    }

    public void custom_dialog(View v) {
        View dialogView = getLayoutInflater().inflate(R.layout.custom_dl, null);

        AlertDialog.Builder builder = new AlertDialog.Builder(v.getContext());
        builder.setView(dialogView);

        final AlertDialog alertDialog = builder.create();
        alertDialog.show();

        Button ok_btn = dialogView.findViewById(R.id.ok_btn);
        ok_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(getApplicationContext(), "OK 버튼을 눌렀습니다.", Toast.LENGTH_LONG).show();
                alertDialog.dismiss();
            }
        });

        Button cancle_btn = dialogView.findViewById(R.id.cancle_btn);
        cancle_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                alertDialog.dismiss();
            }
        });
    }

}



- 일반적으로 다이얼로그를 만들어 줄 때는 AlertDialog.Builder 객체를 생성하여 사용한다.


- setTitle(), setMessage()의 메소드로 제목, 내용을 설정한다.


- setPositiveButton() 메소드를 사용하여서 텍스트 지정과 동작을 구현할 수 있다.


- 마찬가지로 setNegativeButton() 메소드를 이용하여 취소 기능을 만들 수도 있다.


- 마지막으로 show()해주어 만든 다이얼로그를 보여주어야 한다.




- 커스텀 다이얼로그를 만들어 줄 때는

View dialogView = getLayoutInflater().inflate(R.layout.custom_dl, null);

로 만든 레이아웃을 지정한후 이를 builder의 setView()메소드로 설정한다.


- 버튼 등 접근할 때도 dialogView를 통하여 접근한 후 기능을 구현하면 된다.


- 다이얼로그를 종료할 때는 dismiss() 메소드를 사용한다.






안드로이드 Button style 버튼 꾸미기





결과

결과





Layout 코드

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/holo_orange_light"
    android:orientation="vertical">


    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/btn_empty"
        android:text="배경 투명"
        android:textColor="@android:color/background_light"
        android:textSize="24sp"
        android:textStyle="bold" />

    <Button
        android:id="@+id/button2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/btn_style"
        android:text="버튼 스타일"
        android:textColor="@android:color/background_light"
        android:textSize="24sp" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/text_style"
        android:gravity="center"
        android:text="텍스트 뷰"
        android:textColor="#FFA159"
        android:textSize="24sp"
        android:textStyle="bold" />

    <EditText
        android:id="@+id/editText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/btn_style"
        android:gravity="center"
        android:text="텍스트 뷰"
        android:textSize="24sp"
        android:textStyle="bold" />
</LinearLayout>








파일 생성

- drawable -> resource file을 생성한다.



- 스타일을 쉽게 만들기 위하여 아래 사이트를 이용한다.

https://angrytools.com/android/button/




스타일 제작


- 원하는 스타일을 만든 후 해당 부분을 복사하여 파일에 복사해준 후 사용한다.






투명 Style 코드

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
    <corners
        android:radius="10dp"
        />
    <solid
        android:color="#00FFFFFF"
        />
    <size
        android:width="270dp"
        android:height="60dp"
        />
    <stroke
        android:width="3dp"
        android:color="#898989"
        />
</shape>

ㄴ 백그라운드를 투명하게 하기 위해서는 solid 부분을 지워주면 된다. 해당 예제는 투명도를 조절하는 방법을 보이기 위하여 작성하였다.


- corners : 사각형 각 모서리부분을 둥글게 만든다. 값이 클수록 각이 없어진다.


- solid : 배경 Color를 지정한다. 여기서는 투명하게 하기 위해서 Color를 "#00FFFFFF" 로 주었다. 


- size : 사이즈를 지정한다. height를 바꾸어주면 높이가 바뀌는것을 확인할 수 있다.


- stroke : 테두리 선을 지정한다. width로 길이를 color로 색을 지정한다.








Style 코드

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
    <corners
        android:radius="8dp"
        />
    <solid
        android:color="#CCFFDD"
        />
    <padding
        android:left="0dp"
        android:top="0dp"
        android:right="0dp"
        android:bottom="0dp"
        />
    <size
        android:width="270dp"
        android:height="60dp"
        />
    <stroke
        android:width="3dp"
        android:color="#2FEDE7"
        />
</shape>


- padding : padding 값을 지정해 줄수 도 있다.








안드로이드 SharedPreferences 옵션이나 간단한 데이터 저장하기





결과

초기 화면

데이터 입력, 종료 후 재시작





Layout 코드


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <EditText
        android:id="@+id/editText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="10dp"
        android:hint="ID"
        android:textSize="30sp" />

    <EditText
        android:id="@+id/editText2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="10dp"
        android:hint="Pass"
        android:textSize="30sp" />

    <CheckBox
        android:id="@+id/checkBox"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="CheckBox"
        android:textSize="30sp"/>
</LinearLayout>




Java 코드

package com.example.testapp;

import androidx.appcompat.app.AppCompatActivity;

import android.content.SharedPreferences;
import android.os.Bundle;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    EditText editText, editText2;
    CheckBox checkBox;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        editText = findViewById(R.id.editText);
        editText2 = findViewById(R.id.editText2);
        checkBox = findViewById(R.id.checkBox);

        SharedPreferences sp = getSharedPreferences("temp", MODE_PRIVATE);

        String s = sp.getString("id", "");
        String s2 = sp.getString("pwd", "");
        Boolean b = sp.getBoolean("cb", false);

        editText.setText(s);
        editText2.setText(s2);
        checkBox.setChecked(b);
    }

    @Override
    protected void onStop() {
        super.onStop();
        SharedPreferences prefer = getSharedPreferences("temp", MODE_PRIVATE);
        SharedPreferences.Editor editor = prefer.edit();
        editor.putString("id", editText.getText().toString());
        editor.putString("pwd", editText2.getText().toString());
        editor.putBoolean("cb", checkBox.isChecked());

        editor.apply();
    }

}





데이터 저장하기

- onStop()부분에서 구현해줌으로써 종료하거나 할때 데이터를 저장할 수 있도록 한다.


- getSharedPerferences( 이름, 모드) 로 SharedPerferences 객체를 가져온다.

이름은 저장할 데이터 분류의 따라 지정해주며 모드는


MODE_PRIVATE : 해당 application에서만 사용 가능

MODE_WORLD_READABLE : 다른 application에서 읽기 가능

MODE_WORLD_WRITEABLE : 다른 application에서 쓰기 가능


들이 있으며 보안상의 문제도 있으니 왠만해서는 MODE_PRIVATE를 사용한다.


- 데이터를 저장할 때는 editor 객체의 putXXX(키, 값) 메소드를 사용하여서 <키, 값> 형태로 저장한다.


- 삭제해줄 때에는 remove(키)를 사용하면 가능하다.


- 값을 저장해주었으면 마지막으로 apply()commit()을 해준다.





데이터 가져오기

- 저장된 데이터를 다시 가져올 때도 우선 getSharedPerferences( 이름, 모드) 로 SharedPerferences 객체를 가져온다.


- 가져온 객체의 getXXX(키) 메소드를 사용하여서 <키, 값> 형태로 저장하였던 값을 가져올 수 있다.







C++ vector 생성 및 삽입, 삭제




결과1

결과






코드1

#include <string>
#include <vector>
#include <iostream>
using namespace std;

int main() {

	vector<int> v(5, 1);	// length = 5 개를 1로 초기화
	vector<string> v2;
	if (v2.empty()) cout << "벡터가 비어있습니다.\n";	// 비어있는지 검사

	for (int a : v) {
		cout << a << " ";
	}
	cout  <<"\n";


	v2.push_back("dsa");	// 맨뒤에 삽입한다.
	v2.push_back("abc");
	v2.push_back("gsd");
	v2.push_back("gsa");
	v2.push_back("eqw");
	v2.push_back("yert");
	v2.pop_back();	// 맨뒤를 삭제한다.

	for (string a : v2) {
		cout << a << " ";
	}

	// vector에서 맨 앞 요소와 맨 뒤요소를 가져온다.
	cout << "\n" << v2.front() << " " << v2.back() << "\n";	

	return 0;
}




vector 생성

- 8라인을 보면 벡터를 생성하면서 초기화 해주고 있다.

v(5, 1) : 5 size 만큼 1로 초기화 해준다.


- 초기값이 없을 경우는 9라인처럼 선언만 해주면 된다.




empty() : 비어있는지 검사한다.

- 비어있으면 true를 아니면 false를 리턴한다.




clear() : vector를 비운다.




push_back() : 맨뒤에 요소 삽입

pop_back() : 맨뒤에 요소 삭제

- vector에서 요소를 삽입, 삭제할 때 주로 사용한다.


- 맨 뒤에 삽입, 삭제를 함으로써, 가장 마지막의 들어온 것이 가장 먼저나가는(후입선출) 구조인 스택처럼 사용할 수도 있다.





front() : 맨 앞의 요소 가져옴

back() : 맨 뒤의 요소 가져옴






vector 요소 중간의 삽입, 삭제, 배열 삽입




결과2

결과2





코드2

#include <string>
#include <vector>
#include <iostream>
using namespace std;

int main() {
	vector<int> v(3, 1);
	vector<int>::iterator it = v.begin();

	cout << "1. 초기화 : ";
	for (int n : v) cout << n << " ";
	cout << "\n";

	it = v.insert(it, 2);
	cout << "2. 맨앞에 삽입 : ";
	for (int n : v) cout << n << " ";
	cout << "\n";

	it = v.insert(it, 2, 3);
	cout << "3. 맨앞에 여러개 삽입 : ";
	for (int n : v) cout << n << " ";
	cout << "\n";

	it = v.insert(it+3, 2, 4);
	cout << "4. 3번째부터 여러개 삽입 : ";
	for (int n : v) cout << n << " ";
	cout << "\n";


	int arr[] = { 5, 50, 500, 5000};

	it = v.insert(v.begin(), arr, arr+4);
	cout << "5. 맨앞의 배열 삽입 : ";
	for (int n : v) cout << n << " ";
	cout << "\n";

	// 1<= 삭제 < 4 인걸 주의해야 한다.
	v.erase(v.begin() + 1, v.begin() + 4);
	cout << "6. 1~3까지 삭제 : ";
	for (int n : v) cout << n << " ";
	cout << "\n";

	return 0;
}




insert() : 위치를 지정하여 삽입

- 삽입할 위치는 it로 지정된다. iterator를 따로 선언하지 않고 그냥 v.begin()을 사용하는 것이 덜 헷갈린다.


- 4번을 보면 it+3을 해주 3번째부터 2개의 4를 삽입하는 것을 볼 수 있다.


- 5번을 보면 int형 배열을 삽입해준다. 그 때 insert의 인수로는

insert(vector 삽입할 위치, 배열 삽입 시작위치, 배열 삽입 끝위치) 이다.

5번에서는 배열 arr의 0~4 (4는 포함안됨) 를 삽입해 준것이다.





erase() : 위치를 지정하여 삭제

- insert() 와 마찬가지로 위치를 지정해주면 삭제한다.


- 주의 할점은 범위로서 6번에서 

erase(v.begin()+1, v.begin()+4); 를 해줌으로써 vector의 1~3요소가 삭제되었다.

, 1 <= 삭제 < 4 로 마지막은 포함되지 않는다.





추가 내용


정렬


링크

[C++/STL] - C++ vector 오름차순, 내림차순 정렬





pair을 사용하여 2개씩 값 저장


링크

[C++/STL] - C++ vector and pair 사용




Java 시간 차 구하기 ChronoUnit





결과

결과





코드

public static void main(String[] args) {
		LocalDateTime temp = LocalDateTime.of(2019, 1, 1, 13, 0, 0);
		LocalDateTime target = LocalDateTime.of(2020, 3, 1, 14, 0, 0);
		System.out.println("오늘 날짜와 시간 : " + temp);
		System.out.println("목표 날짜와 시간 : " + target);
		
		// temp가 target보다 이후이다.
		if(!temp.isAfter(target)) 
			System.out.println("temp가 target보다 이후이다.(거짓)");
		// temp가 target보다 이전이다.
		if(temp.isBefore(target)) 
			System.out.println("올바른 시간을 입력하였습니다.\n");
		
		
		System.out.println("남은 년 : " + ChronoUnit.YEARS.between(temp, target));
		System.out.println("남은 월 : " + ChronoUnit.MONTHS.between(temp, target));
		System.out.println("남은 일 : " + ChronoUnit.DAYS.between(temp, target));
		System.out.println("남은 시 : " + ChronoUnit.HOURS.between(temp, target));
		System.out.println("남은 분 : " + ChronoUnit.MINUTES.between(temp, target));
		System.out.println("남은 초 : " + ChronoUnit.SECONDS.between(temp, target));
		
	}





isAfter() : 이후 날짜인지 검사

- A.inAfter(B) : A가 B 이후이면 True 이다.


- 계획 일정이나, 목표같은 날짜를 입력받을 때 옳바른 값을 입력하였는지 검사할 수 있다.





isBefore() : 이전 날짜인지 검사

- A.inBefore(B) : A가 B 이전이면 True 이다.


- 계획 일정이나, 목표같은 날짜를 입력받을 때 옳바른 값을 입력하였는지 검사할 수 있다.





ChronoUnit.YEARS.between(temp, target) : (년) 차이를 구함

- temp와 target 년 차이를 구한다.


- YEARS뿐만 아니라 MONTHS, DAYS, HOURS 를 사용하여서 날짜나 시간 차이도 구할 수 있다.









Java 날짜와 시간 얻기 

LocalDate, LocalTime 

LocalDateTime, ZonedDateTime





결과

결과






코드

public static void main(String[] args) {
		// 1. 날짜만 저장
		LocalDate ld = LocalDate.now();
		LocalDate ld2 = LocalDate.of(2022, 2, 15);
		System.out.println("오늘 날짜 : " + ld);
		System.out.println("만든 날짜 : " + ld2);
		
		// 2. 시간만 저장
		LocalTime lt = LocalTime.now();
		LocalTime lt2 = LocalTime.of(14, 29, 30);
		System.out.println("지금 시간 : " + lt);
		System.out.println("만든 시간 : " + lt2);
		
		//3. 1번+2번 = 날짜+시간
		LocalDateTime ldt = LocalDateTime.now();
		System.out.println("오늘 날짜와 현재 시간 : " + ldt);
		
		// 4. TimeZone(타임존)의 날짜와 시간을 저장하며 타임존에 대한 정보까지
		ZonedDateTime zdt = ZonedDateTime.now(ZoneId.of("Asia/Seoul"));
		ZonedDateTime zdt2 = ZonedDateTime.now(ZoneId.of("America/Los_Angeles"));
		System.out.println("서울 타임존 : " + zdt);
		System.out.println("LA 타임존 : " + zdt2);
	}





자바 8부터 추가되었고 기존의 사용하던 Date와 Calendar의 불편함을 보완하기 위하여 추가되었다.



LocalDate : 날짜만 저장 가능

- now() 메소드를 사용하면 오늘 날짜의 정보를 가져온다.


- LocalDate.of()를 사용하여서 직접 날짜를 지정해 줄 수 있다.


- 메소드

메소드

설명

getYear()

년도

getMonthValue()

getDayOfMonth()

getDayOfWeek()

요일 (영어로 리턴)

isLeapYear()

윤년 검사

minusMonths(long n)

월 빼기

plusWeeks(long n)

주 더하기

withDayOfMonth(int n)

일 변경 

->  plus, minus 로 년, 월, 일, 주 등을 더해고 뺄 수 있다.

-> with를 사용하면 지정한 값으로 년, 일, 월을 변경할 수 있다.






LocalTime : 시간만 저장 가능

- LocalDate와 유사하다. (날짜 대신 시간)


- LocalDate와 마찬가지로 now() 사용하여서 현재 시간을 가져올 수도 있으며 of() 메소드를 사용하여서 직접 시간을 지정해 줄 수 있다.


- 메소드

메소드

설명

getHour()

시간

getMinute()

getSecond()

plusMinutes(long n)

분 더하기

minusHours(long n)

시 빼기

withMinute(int n)

분 변경 

-> plus, minus로 시간, 분, 초를 더하거나 빼줄 수 있다.

-> with를 사용하여서 값을 변경할 수도 있다.





LocalDateTime : 날짜와 시간을 저장

- 이름에서 짐작할 수 있듯이 LocalDate + LocalTime 이다.


- 날짜와 시간 둘다 저장할 수 있으며 now()나 of()로 값을 줄 수 있다.


- 결과를 보면 맨 뒤 '.'하고 쓸때없이 긴 숫자가 이어져 있다. 이는 나노초를 나타내며 이를 표시않기 위해서는 오버라이딩하여 재정의해야한다.





ZonedDateTime : 타임존과 날짜 시간 저장

- Timezone(타임존)의 따른 날짜와 시간을 저장한다.


- 위 코드에서는 Seoul이나 LA를 예로 들었다.


- Zone ID의 관하여서는 

https://docs.oracle.com/javase/8/docs/api/java/time/ZoneId.html

해당 페이지를 참고하면 된다.








'JAVA > 심화' 카테고리의 다른 글

Java 제네릭(Generic) 타입  (0) 2020.04.01
Java 시간 차 구하기 ChronoUnit  (0) 2020.03.28
Java Pattern 문자열 검증하기  (0) 2020.03.27
Java 배열 Arrays 클래스  (0) 2020.03.26
Java DecimalFormat 천단위마다 쉼표 입력  (0) 2020.03.26

Java Pattern 문자열 검증하기





결과

결과





코드

public static void main(String[] args) {
		String sec1 = "(010|02)-\\d{3,4}-\\d{4}";
		String phone = "010-1234-5678";
		
		if(Pattern.matches(sec1, phone)) {
			System.out.println("전화번호가 양식에 맞습니다.");
		}
		else {
			System.out.println("전화번호가 양식에 맞지 않습니다.");
		}
		
		String sec2 = "\\w+@\\w+\\.\\w+";
		String sec3 = "\\w+@\\w+\\.\\w+(\\.\\w+)?";
		String email = "abcde@abcde.co.kr";
		
		
		System.out.println("이메일이 양식에 " + (Pattern.matches(sec2, email) ? "맞습니다." : "맞지 않습니다.") );
		System.out.println("이메일이 양식에 " + (Pattern.matches(sec3, email) ? "맞습니다." : "맞지 않습니다.") );
		
	}





Pattern 클래스 : 문자열 검증

- 이메일이나 전화번호 등 특정 형식(양식)이 정해져있는 값을 입력 받았을 때 올바른 양식대로 값을 입력하였는지 확인하기 위하여 사용한다.


- java.util.regex.Pattern 을 import 한다.


- Pattern 클래스의 matches 메소드의 표현식과 검증할 문자열을 주어 검사한다.



- 정규 표현식 기호들

 기호

의미 

\d

한 개의 숫자

\w

한 개의 영어 또는 수잦

\s

공백

[a-z]

a~z 중 한개의 문자

ex) [0-9] : 0~9 중 한 개

?

없거나 또는 한 개

*

없거나 또는 한 개 이상

+

한개 이상

( )

수식처럼 묶기

|

파이프 문자(OR)

{ }

{n} : 정확히 n개만 있다.

{n,} : 최소 n개는 있다.

{n, m} : n개 이상 m개 이하이다.



- 정규 표현식 기호를 사용하여 정규 표현식을 만들 때 이는 문자열이므로 문자열 안에서 \를 표현하기 위하여 '\\' 처럼 2번을 써주어야 한다.

'.'을 사용해 줄 때도 '\.' 처럼 작성해주어야 한다.



- 괄호로 묶은 다음 ? 를 준다면 괄호 내의 내용이 없거나 한개 라는 의미이다.

위 결과를 보면 검사할 이메일의 형식이 '.co.kr' 으로 2번의 '.'과 문자들이 사용된다.

따라서 ( )와 ?를 사용하여 맨 뒤에 '.kr' 처럼 '.'이 한번더 사용하여도 검사의 통과되도록 할 수 있다.





Java 배열 Arrays 클래스





결과

결과





코드

public static void main(String[] args) {
		int[] arr1 = {4, 2 , 5, 1, 3};
		char[] arr2 = {'C', 'A', 'b', 'a', 'c' };
		String[] arr3 = {"afd", "gdr", "abg", "bcg", "zfg" }; 
		String[] arr4 = Arrays.copyOf(arr3, arr3.length);
		
		Arrays.sort(arr1);
		for(int i=arr1.length-1;  i>=0; i--)
			System.out.print(arr1[i] + ", ");
		System.out.print("\n");

		Arrays.sort(arr2);
		for(int i=0; i<arr2.length; i++)
			System.out.print(arr2[i] + ", ");
		System.out.print("\n");
		
		Arrays.sort(arr3);
		for(int i=0; i<arr3.length; i++)
			System.out.print(arr3[i] + ", ");
		
	}





Arrays.copyOf(배열, 배열 길이) : 배열 복사

- 배열을 깊은 복사한다.





Arrays.sort() : 배열을 오름차순으로 정렬한다.

- 내림차순은 간단하게 정렬을 한 후 뒤에서부터 참조하면 된다.


- 클래스 배열을 정렬하고자 하면 compareTo 메소드를 Override 해서 정렬할 값을 지정해주면 된다.







+ Recent posts