Notice
Recent Posts
Recent Comments
Link
투케이2K
11. (TWOK/UTIL) [Android/Java] C_Util - string, 날짜, 빌드 정보, 모바일 제어, 형 변환 등 유틸 파일 클래스 본문
투케이2K 유틸파일
11. (TWOK/UTIL) [Android/Java] C_Util - string, 날짜, 빌드 정보, 모바일 제어, 형 변환 등 유틸 파일 클래스
투케이2K 2022. 3. 21. 17:04[설 명]
프로그램 : Android / Java
설 명 : string, 날짜, 빌드 정보, 모바일 제어, 형 변환 등 유틸 파일 클래스
[소스 코드]
package com.example.testapp;
import static android.content.Context.CLIPBOARD_SERVICE;
import android.app.ActivityManager;
import android.app.AlertDialog;
import android.app.NotificationManager;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.Signature;
import android.media.Ringtone;
import android.media.RingtoneManager;
import android.net.Uri;
import android.os.Build;
import android.os.PowerManager;
import android.os.Vibrator;
import android.provider.Settings;
import android.text.Html;
import android.util.Base64;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Display;
import android.view.WindowManager;
import android.widget.Toast;
import org.json.JSONObject;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class C_Util {
/**
* TODO [클래스 설명]
* // -----------------------------------------
* 1. 프로그램 상 필요한 유틸 파일 모음 클래스
* // -----------------------------------------
* 2. [RETURN] getNowDateTime24 : 24 시간 형태 현재 날짜 확인 : 2022.03.21 14:34:20 월요일
* // -----------------------------------------
* 3. [RETURN] getNowDateTime24Number : 24 시간 형태 현재 날짜 확인 : 20220321143420
* // -----------------------------------------
* 4. [VOID] showMobileBuildInfo : 모바일 빌드 정보 확인 실시
* // -----------------------------------------
* 5. [RETURN] getMobileCode : 모바일 버전 코드 확인 : (ex : 1)
* // -----------------------------------------
* 6. [RETURN] getMobileVersion : 모바일 버전명 확인 : (ex : 1.0.0)
* // -----------------------------------------
* 7. [RETURN] getMobilePackageName : 애플리케이션 패키지명 확인 : com.test.app
* // -----------------------------------------
* 8. [VOID] callDisplayWakeUp : 모바일 디스플레이 화면 강제 기상
* // -----------------------------------------
* 9. [VOID] callVibrator : 모바일 진동 발생
* // -----------------------------------------
* 10. [VOID] callRingtoneSound() : 모바일 기본 알림을 발생
* // -----------------------------------------
* 11. [VOID] removeBadge : 노티피케이션 뱃지 지우기 [특정 아이디 / 전체]
* // -----------------------------------------
* 12. [RETURN] getMobileSize : 모바일 화면 크기 구하기 DP : W / S / M / L / LX / NO
* // -----------------------------------------
* 13. [RETURN] convert_HexString_To_Byte : 헥사 문자열 데이터를 바이트 배열로 반환 실시 : byte array
* // -----------------------------------------
* 14. [RETURN] convert_ByteArray_To_HexString : 바이트 배열 데이터를 헥사 문자열로 반환 실시 : 01 02 AB
* // -----------------------------------------
* 15. [RETURN] matchString : 정규식 수행 메소드 : 공백 및 특수 문자 제거 문자열
* // -----------------------------------------
* 16. [RETURN] HexUtil_To_ByteArray : 헥사 문자열 데이터를 바이트 배열로 반환 실시 : byte array
* // -----------------------------------------
* 17. [RETURN] getDateMinus : 두 날짜 차이 계산 수행 : 분, 초 int 형 반환
* // -----------------------------------------
* 18. [RETURN] getNowUseActivity : 현재 실행 중인 최상위 액티비티 명 확인 : 클래스 명 반환
* // -----------------------------------------
* 19. [RETURN] getTimeStamp_To_Date : 타임 스탬프에서 Date 24시간 날짜 형식으로 변환 실시 : 20220321143420
* // -----------------------------------------
* 20. [RETURN] stringNotNull : String 문자열 데이터 널 판단 실시 : true / false
* // -----------------------------------------
* 21. [RETURN] stringMultiContains : String 문자열 다중 contains 문자 포함 확인 실시 : true / false
* // -----------------------------------------
* 22. [RETURN] stringJsonObjectEnable : String 문자열 데이터를 Json Object 형식으로 변경 가능 한지 체크 실시 : true / false
* // -----------------------------------------
* 23. [RETURN] arrayListStringToArrayList : 배열 형식 String 문자열 데이터를 ArrayList 로 반환 실시
* // -----------------------------------------
* 24. [RETURN] htmlTagRemoveString : html 형식 태그 제거 문자열 데이터 반환
* // -----------------------------------------
* 25. [RETURN] htmlTagRemoveString_2 : html 형식 태그 제거 문자열 데이터 반환
* // -----------------------------------------
* 26. [RETURN] stringToByte : string 문자열 데이터를 byte 배열 값으로 반환 수행
* // -----------------------------------------
* 27. [RETURN] byteToString : byte 배열 값을 string 문자열 데이터로 반환
* // -----------------------------------------
* 28. [RETURN] stringCount : string 문자열 데이터에서 특정 문자 개수 카운트 반환
* // -----------------------------------------
* 29. [RETURN] removeArrayOverlap : ArrayList 배열 중복 데이터 제거 실시
* // -----------------------------------------
* 30. [RETURN] stringIsNumber : string 문자열 데이터 모두 정수 구성 여부 확인
* // -----------------------------------------
* 31. [RETURN] doubleCutLength : Double 소수점 데이터를 특정 소수점 자릿수 기준으로 자르기 실시 [반올림 없음]
* // -----------------------------------------
* 32. [RETURN] arraySubList : subList 사용해 array list 가변 배열 데이터 부분 데이터 반환 실시
* // -----------------------------------------
* 33. [RETURN] arrayIntersect : ArrayList 배열 데이터 교집합 수행 실시
* // -----------------------------------------
* 34. [RETURN] urlFileExtensionName : URL 주소 파일 확장자 포함 확인 실시
* // -----------------------------------------
* 35. [VOID] appDownloadFile : 다운로드 매니저 사용해 파일 다운로드 수행
* // -----------------------------------------
* 36. [RETURN] LPAD : 왼쪽 기준 부족한 데이터 채우기 실시
* // -----------------------------------------
* 37. [RETURN] RPAD : 오른쪽 기준 부족한 데이터 채우기 실시
* // -----------------------------------------
* 38. [RETURN] startRemoveChar : 시작 기준 특정 문자 지우기 실시
* // -----------------------------------------
* 39. [RETURN] endRemoveChar : 종료 기준 특정 문자 지우기 실시
* // -----------------------------------------
* 40. [RETURN] getDeviceOsVersion : 디바이스 소프트웨어 OS 정보 확인
* // -----------------------------------------
* 41. [RETURN] stringIsUrlParsing : string 문자열 url 주소 형식으로 변경 가능한지 체크 실시
* // -----------------------------------------
* 42. [RETURN] getTimeStamp : 현재 날짜 및 시간 밀리세컨드 13자리 타임스탬프 값 반환
* // -----------------------------------------
* 43. [VOID] clearAppCache : 앱 캐시 초기화 실시
* // -----------------------------------------
* 44. [VOID] clearAppData : 앱 캐시 및 데이터 초기화 실시
* // -----------------------------------------
* 45. [RETURN] getDeviceModelName : 실제 디바이스 기기 모델 이름 명칭 확인
* // -----------------------------------------
* */
// TODO [빠른 로직 찾기 : 주석 로직 찾기]
/**
* // -----------------------------------------
* // [SEARCH FAST] : []
* // -----------------------------------------
*/
// TODO [24 시간 형태 현재 날짜 확인]
public static String getNowDateTime24() {
/**
* // -----------------------------------------
* [getNowDateTime24 메소드 설명]
* // -----------------------------------------
* 1. 24 시간 형태 현재 날짜 확인 수행 메소드
* // -----------------------------------------
* 2. 호출 방법 : C_Util.getNowDateTime24();
* // -----------------------------------------
* 3. 리턴 데이터 : 2022.03.21 14:34:20 월요일
* // -----------------------------------------
* */
// [날짜 데이터 확인 실시]
long time = System.currentTimeMillis();
SimpleDateFormat dayTime = new SimpleDateFormat("yyyy.MM.dd kk:mm:ss E요일");
String str = dayTime.format(new Date(time));
// [로그 출력]
/*
Log.i("---","---");
Log.d("//===========//","================================================");
Log.i("","\n"+"[C_Util >> getNowDateTime24() :: 24 시간 형태 현재 날짜 확인]");
Log.i("","\n"+"[날짜 :: "+String.valueOf(str)+"]");
Log.d("//===========//","================================================");
Log.i("---","---");
// */
// [리턴 데이터 반환 실시]
return str;
}
// TODO [24 시간 형태 현재 날짜 확인]
public static String getNowDateTime24Number() {
/**
* // -----------------------------------------
* [getNowDateTime24Number 메소드 설명]
* // -----------------------------------------
* 1. 24 시간 형태 현재 날짜 확인 수행 메소드
* // -----------------------------------------
* 2. 호출 방법 : C_Util.getNowDateTime24Number();
* // -----------------------------------------
* 3. 리턴 데이터 : 20220321143420
* // -----------------------------------------
* */
// [날짜 데이터 확인 실시]
long time = System.currentTimeMillis();
SimpleDateFormat dayTime = new SimpleDateFormat("yyyyMMddkkmmss");
String str = dayTime.format(new Date(time));
// [로그 출력]
/*
Log.i("---","---");
Log.d("//===========//","================================================");
Log.i("","\n"+"[C_Util >> getNowDateTime24Number() :: 24 시간 형태 현재 날짜 확인]");
Log.i("","\n"+"[날짜 :: "+String.valueOf(str)+"]");
Log.d("//===========//","================================================");
Log.i("---","---");
// */
// [리턴 데이터 반환 실시]
return str;
}
// TODO [모바일 빌드 정보 확인]
public static void showMobileBuildInfo(Context mContext) {
/**
* // -----------------------------------------
* [showMobileBuildInfo 메소드 설명]
* // -----------------------------------------
* 1. 모바일 빌드 정보 확인 수행 메소드
* // -----------------------------------------
* 2. 호출 방법 : C_Util.showMobileBuildInfo(A_Main.this);
* // -----------------------------------------
* */
try {
Log.i("---","---");
Log.d("//===========//","================================================");
// [고유 단말기 정보 확인]
Log.i("","\n"+"[C_Util >> showMobileBuildInfo() :: 모바일 빌드 정보 확인]");
Log.i("","\n"+"["+"BRAND :: "+String.valueOf(Build.BRAND)+"]");
Log.i("","\n"+"["+"MODEL :: "+String.valueOf(Build.MODEL)+"]");
Log.i("","\n"+"["+"MANUFACTURER :: "+String.valueOf(Build.MANUFACTURER)+"]");
Log.i("","\n"+"["+"BOARD :: "+String.valueOf(Build.BOARD)+"]");
Log.i("","\n"+"["+"ID - "+String.valueOf(Build.ID)+"]");
Log.i("","\n"+"["+"BOOTLOADER :: "+String.valueOf(Build.BOOTLOADER)+"]");
Log.i("","\n"+"["+"DEVICE :: "+String.valueOf(Build.DEVICE)+"]");
Log.i("","\n"+"["+"DISPLAY :: "+String.valueOf(Build.DISPLAY)+"]");
Log.i("","\n"+"["+"HARDWARE :: "+String.valueOf(Build.HARDWARE)+"]");
Log.i("","\n"+"["+"HOST :: "+String.valueOf(Build.HOST)+"]");
Log.i("","\n"+"["+"PRODUCT :: "+String.valueOf(Build.PRODUCT)+"]");
Log.i("","\n"+"["+"TYPE :: "+String.valueOf(Build.TYPE)+"]");
Log.i("","\n"+"["+"USER :: "+String.valueOf(Build.USER)+"]");
Log.i("","\n"+"["+"TAGS :: "+String.valueOf(Build.TAGS)+"]");
Log.i("","\n"+"["+"TIME :: "+String.valueOf(Build.TIME)+"]");
Log.i("","\n"+"-"+""+""+"-");
// [안드로이드 APK 파일 정보 확인]
PackageInfo pi = mContext.getPackageManager().getPackageInfo(mContext.getPackageName(), 0);
Log.i("","\n"+"["+"versionName :: "+String.valueOf(pi.versionName)+"]");
Log.i("","\n"+"["+"versionCode :: "+String.valueOf(pi.versionCode)+"]");
Log.i("","\n"+"-"+""+""+"-");
// [패키지명 확인]
Log.i("","\n"+"["+"getPackageName :: "+String.valueOf(mContext.getPackageName())+"]");
Log.i("","\n"+"["+"getPackage :: "+String.valueOf(mContext.getClass().getPackage().getName().trim())+"]");
Log.i("","\n"+"-"+""+""+"-");
// [현재 실행 중인 클래스 명 확인]
ActivityManager manager = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> info = manager.getRunningTasks(1);
ComponentName componentName = info.get(0).topActivity;
String ActivityName = String.valueOf(componentName.getShortClassName().substring(1));
Log.i("","\n"+"["+"ActivityName :: "+String.valueOf(ActivityName)+"]");
Log.i("","\n"+"["+"getComponentName :: "+String.valueOf(mContext.getPackageName())+"]");
Log.d("//===========//","================================================");
Log.i("---","---");
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
}
// TODO [모바일 버전 코드 확인]
public static String getMobileCode(Context mContext) {
/**
* // -----------------------------------------
* [getMobileCode 메소드 설명]
* // -----------------------------------------
* 1. 모바일 버전 코드 확인 (ex : 1)
* // -----------------------------------------
* 2. 호출 방법 : C_Util.getMobileCode(A_Main.this);
* // -----------------------------------------
* 3. 리턴 데이터 : 1
* // -----------------------------------------
* */
String returnData = "";
try {
// [빌드 버전 코드 : ex) 1]
PackageInfo pi = mContext.getPackageManager().getPackageInfo(mContext.getPackageName(), 0);
returnData = String.valueOf(pi.versionCode);
Log.i("---","---");
Log.d("//===========//","================================================");
Log.i("","\n"+"[C_Util >> getMobileCode() :: 모바일 버전 코드 확인]");
Log.i("","\n"+"[code :: "+String.valueOf(returnData)+"]");
Log.d("//===========//","================================================");
Log.i("---","---");
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return returnData;
}
// TODO [모바일 버전명 확인]
public static String getMobileVersion(Context mContext) {
/**
* // -----------------------------------------
* [getMobileVersion 메소드 설명]
* // -----------------------------------------
* 1. 모바일 버전명 확인 (ex : 1.0.0)
* // -----------------------------------------
* 2. 호출 방법 : C_Util.getMobileVersion(A_Main.this);
* // -----------------------------------------
* 3. 리턴 데이터 : 1.0.0
* // -----------------------------------------
* */
String returnData = "";
try {
// [빌드 버전명 : ex) 1.0.0]
PackageInfo pi = mContext.getPackageManager().getPackageInfo(mContext.getPackageName(), 0);
returnData = String.valueOf(pi.versionName);
Log.i("---","---");
Log.d("//===========//","================================================");
Log.i("","\n"+"[C_Util >> getMobileVersion() :: 모바일 버전명 확인]");
Log.i("","\n"+"[version :: "+String.valueOf(returnData)+"]");
Log.d("//===========//","================================================");
Log.i("---","---");
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return returnData;
}
// TODO [애플리케이션 패키지명 확인]
public static String getMobilePackageName(Context mContext) {
/**
* // -----------------------------------------
* [getMobilePackageName 메소드 설명]
* // -----------------------------------------
* 1. 애플리케이션 패키지명 확인
* // -----------------------------------------
* 2. 호출 방법 : C_Util.getMobilePackageName(A_Main.this);
* // -----------------------------------------
* 3. 리턴 데이터 : com.test.app
* // -----------------------------------------
* */
String returnData = "";
try {
// [패키지 명칭 : ex) com.test.app]
PackageInfo pi = mContext.getPackageManager().getPackageInfo(mContext.getPackageName(), 0);
returnData = String.valueOf(mContext.getPackageName().trim());
Log.i("---","---");
Log.d("//===========//","================================================");
Log.i("","\n"+"[C_Util >> getMobilePackageName() :: 애플리케이션 패키지명 확인]");
Log.i("","\n"+"[package :: "+String.valueOf(returnData)+"]");
Log.d("//===========//","================================================");
Log.i("---","---");
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return returnData;
}
// TODO [모바일 디스플레이 화면 강제 기상 깨우기]
public static void callDisplayWakeUp(Context mContext){
/**
* // -----------------------------------------
* [callDisplayWakeUp 메소드 설명]
* // -----------------------------------------
* 1. 모바일 디스플레이 화면 강제 기상 깨우기 수행 메소드
* // -----------------------------------------
* 2. 필요 퍼미션 :
* - <uses-permission android:name="android.permission.WAKE_LOCK"/>
* // -----------------------------------------
* 3. 호출 방법 : C_Util.callDisplayWakeUp(A_Main.this);
* // -----------------------------------------
* */
try {
Log.i("---","---");
Log.d("//===========//","================================================");
Log.i("","\n"+"[C_Util >> callDisplayWakeUp() :: 모바일 디스플레이 화면 강제 기상 실시]");
Log.d("//===========//","================================================");
Log.i("---","---");
PowerManager pm = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wakelock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "My:Tag");
wakelock.acquire(); // [화면 즉시 기상 실시]
wakelock.release(); // [WakeLock 자원 해제]
}
catch (Exception e){
e.printStackTrace();
}
}
// TODO [모바일 진동 발생 시키는 메소드]
public static void callVibrator(Context mContext){
/**
* // -----------------------------------------
* [callVibrator 메소드 설명]
* // -----------------------------------------
* 1. 모바일 진동 발생 수행 메소드
* // -----------------------------------------
* 2. 필요 퍼미션 :
* - <uses-permission android:name="android.permission.VIBRATE" />
* // -----------------------------------------
* 3. 호출 방법 : C_Util.callVibrator(A_Main.this);
* // -----------------------------------------
* */
try {
Log.i("---","---");
Log.d("//===========//","================================================");
Log.i("","\n"+"[C_Util >> callVibrator() :: 모바일 진동 발생 실시]");
Log.d("//===========//","================================================");
Log.i("---","---");
Vibrator vibrator = (Vibrator) mContext.getSystemService(Context.VIBRATOR_SERVICE);
vibrator.vibrate(1000); // miliSecond [지정한 시간동안 진동 / 1000 = 1초]
}
catch (Exception e){
//e.printStackTrace();
}
}
// TODO [모바일 기본 알림을 발생 시키는 메소드]
public static void callRingtoneSound(Context mContext){
/**
* // -----------------------------------------
* [callRingtoneSound 메소드 설명]
* // -----------------------------------------
* 1. 모바일 기본 알림음 수행 메소드
* // -----------------------------------------
* 2. 호출 방법 : C_Util.callRingtoneSound(A_Main.this);
* // -----------------------------------------
* */
try {
Log.i("---","---");
Log.d("//===========//","================================================");
Log.i("","\n"+"[C_Util >> callRingtoneSound() :: 모바일 기본 알림을 발생 실시]");
Log.d("//===========//","================================================");
Log.i("---","---");
Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
Ringtone ringtone = RingtoneManager.getRingtone(mContext, defaultSoundUri);
ringtone.play();
}
catch (Exception e){
e.printStackTrace();
}
}
// TODO [노티피케이션 뱃지 지우기 메소드]
public static void removeBadge(Context mContext, int cancleID){
/**
* // -----------------------------------------
* [removeBadge 메소드 설명]
* // -----------------------------------------
* 1. 노티피케이션 뱃지 지우기 메소드 [특정 아이디 지움 / 전체 지움]
* // -----------------------------------------
* 2. 호출 방법 : C_Util.removeBadge(A_Main.this, 1);
* // -----------------------------------------
* */
try {
Log.i("---","---");
Log.d("//===========//","================================================");
Log.i("","\n"+"[C_Util >> removeBadge() :: 노티피케이션 뱃지 지우기 실시]");
Log.i("","\n"+"[cancleID :: "+String.valueOf(cancleID)+"]");
Log.d("//===========//","================================================");
Log.i("---","---");
NotificationManager notificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.cancel(cancleID); // 캔슬 부분에 적힌 것이 노티피케이션 활성 id 값
notificationManager.cancelAll();
}
catch (Exception e){
e.printStackTrace();
}
}
// TODO [모바일 화면 크기 구하기 dp 사이즈]
public static String getMobileSize(Context mContext){
/**
* // -----------------------------------------
* [getMobileSize 메소드 설명]
* // -----------------------------------------
* 1. 모바일 화면 크기 구하기 dp 사이즈
* // -----------------------------------------
* 2. 호출 방법 : C_Util.getMobileSize(A_Main.this);
* // -----------------------------------------
* 3. 리턴 데이터 : W / S / M / L / XL / NO
* // -----------------------------------------
* */
String size = "";
try {
Display display = ((WindowManager)mContext.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
DisplayMetrics outMetrics = new DisplayMetrics ();
display.getMetrics(outMetrics);
float density = mContext.getResources().getDisplayMetrics().density;
float dpHeight = outMetrics.heightPixels / density;
float dpWidth = outMetrics.widthPixels / density;
int dpWidthValue = (int)dpWidth;
int dpHeightValue = (int)dpHeight;
/**
* [장치] [가로] [세로]
* 1) Watch = 250dp 250dp
* 2) mobile = 320dp 569dp (s6)
* 3) mobile = 400dp 730dp (note 5)
* 4) mobile = 400dp 810dp (note 10 / LG Q9)
* 5) mobile = 800dp 1280dp (Tab)
* 6) Tablet = 960dp 600dp (Tab)
* 1280dp 800dp
*/
if(dpHeightValue < 320){ //0 ~ 319
size = "W";
}
else if(dpHeightValue < 660){ //320 ~ 659
size = "S";
}
else if(dpHeightValue < 750){ //660 ~ 749
size = "M";
}
else if(dpHeightValue < 900){ //750 ~ 899
size = "L";
}
else if(dpHeightValue < 1600){ //900 ~ 1599
size = "XL";
}
else{
size = "NO";
}
Log.i("---","---");
Log.d("//===========//","================================================");
Log.i("","\n"+"[C_Util >> getMobileSize() :: 모바일 화면 크기 구하기 DP]");
Log.i("","\n"+"["+"디바이스 :: "+String.valueOf("Android")+"]");
Log.i("","\n"+"["+"Android OS :: "+String.valueOf(Build.VERSION.RELEASE)+"]");
Log.i("","\n"+"["+"모델 :: "+String.valueOf(Build.MODEL)+"]");
Log.i("","\n"+"["+"제조사 :: "+String.valueOf(Build.MANUFACTURER)+"]");
Log.i("","\n"+"["+"가로 (DP) :: "+String.valueOf(dpWidthValue)+"]");
Log.i("","\n"+"["+"세로 (DP) :: "+String.valueOf(dpHeightValue)+"]");
Log.i("","\n"+"["+"화면 사이즈 :: "+String.valueOf(size)+"]");
Log.d("//===========//","================================================");
Log.i("---","---");
}
catch (Exception e){
e.printStackTrace();
}
return size;
}
// TODO [헥사 문자열 값을 바이트 배열로 변환 수행 메소드 : Hex String convert byte array]
public static byte[] convert_HexString_To_Byte(String data) {
/**
* // -----------------------------------------
* [convert_HexString_To_Byte 메소드 설명]
* // -----------------------------------------
* 1. 헥사 문자열 값을 바이트 배열로 변환 수행 메소드
* // -----------------------------------------
* 2. 호출 방법 : C_Util.convert_HexString_To_Byte("0123456789abcdef0123456789abcdef");
* // -----------------------------------------
* 3. 리턴 데이터 : byte array 배열
* // -----------------------------------------
* */
String hex = data.replaceAll("0x", ""); //0x문자 제거
String hex2 = hex.replaceAll("0X", ""); //0x문자 제거
String Trim = hex2.replaceAll(" ", ""); //공백문자 제거
byte arr[] = new byte[Trim.length()/2]; // (전체 문자열 길이 / 2) 만큼 배열 생성
int before = 0;
int after = 2;
for(int i=0; i<arr.length; i++) {
String value = Trim.substring(before, after); //2글자씩 잘라서 데이터 출력
arr[i] = new java.math.BigInteger(value, 16).byteValue(); //BigInteger사용해 hexString > byte 변환
// [다음 2글자씩 또 변환하기 위함]
before += 2;
after += 2;
}
// [로그 출력]
/*
Log.i("---","---");
Log.d("//===========//","================================================");
Log.i("","\n"+"[C_Util >> convert_HexString_To_Byte() :: Hex String convert byte array]");
Log.i("","\n"+"["+"input :: "+String.valueOf(data)+"]");
Log.i("","\n"+"["+"return :: "+ Arrays.toString(arr) +"]");
Log.d("//===========//","================================================");
Log.i("---","---");
// */
// [리턴 데이터 반환]
return arr;
}
// TODO [바이트 배열 값을 헥사 문자열 값으로 변환 : byte array convert Hex String]
public static String convert_ByteArray_To_HexString(byte buf[]) {
/**
* // -----------------------------------------
* [convert_ByteArray_To_HexString 메소드 설명]
* // -----------------------------------------
* 1. 바이트 배열 값을 헥사 문자열 값으로 변환 수행 메소드
* // -----------------------------------------
* 2. 호출 방법 : C_Util.convert_ByteArray_To_HexString(new byte[] {1, 35, 69, 103, -119, -85, -51, -17, 1, 35, 69, 103, -119, -85, -51, -17} );
* // -----------------------------------------
* 3. 리턴 데이터 : 헥사 문자열 데이터
* // -----------------------------------------
* */
String Hex_Value = "";
for(int i=0; i<buf.length; i++) {
//Hex_Value += String.format("0x%02x ", buf[i]); // [0xfg]
//Hex_Value += String.format("%02x ", buf[i]); // [fg]
//Hex_Value += String.format("0X%02X ", buf[i]); // [0XFG]
Hex_Value += String.format("%02X ", buf[i]); // [FG]
}
// [로그 출력]
/*
Log.i("---","---");
Log.d("//===========//","================================================");
Log.i("","\n"+"[C_Util >> convert_ByteArray_To_HexString() :: byte array convert Hex String]");
Log.i("","\n"+"["+"input :: "+ Arrays.toString(buf) +"]");
Log.i("","\n"+"["+"return :: "+String.valueOf(Hex_Value)+"]");
Log.d("//===========//","================================================");
Log.i("---","---");
// */
// [리턴 반환]
return Hex_Value;
}
// TODO [정규식 수행 메소드]
public static String matchString(String value) {
/**
* // -----------------------------------------
* [matchString 메소드 설명]
* // -----------------------------------------
* 1. 정규식 수행 메소드 [공백 및 특수문자 제거]
* // -----------------------------------------
* 2. 호출 방법 : C_Util.matchString("hello@@TwoK");
* // -----------------------------------------
* 3. 리턴 데이터 : 공백 및 특수문자 제거 데이터 반환
* // -----------------------------------------
* */
/**
* // -----------------------------------------
* [요약 설명]
* // -----------------------------------------
* 1. 정규식 패턴 ^[a-z] : 영어 소문자 허용
* // -----------------------------------------
* 2. 정규식 패턴 ^[A-Z] : 영어 대문자 허용
* // -----------------------------------------
* 3. 정규식 패턴 ^[ㄱ-ㅎㅏ-ㅣ가-힣] : 한글 허용
* // -----------------------------------------
* 4. 정규식 패턴 ^[ㄱ-ㅎㅏ-ㅣ가-힣] : 숫자 허용
* // -----------------------------------------
* 5. 정규식 패턴 ^[ ] or ^[\\s] : 공백 허용
* // -----------------------------------------
*/
// [결과를 반환할 변수 선언 실시]
String result = "";
// [정규식 패턴 형식 정의]
String pattern = "^[ㄱ-ㅎㅏ-ㅣ가-힣a-zA-Z0-9]"; // 정규식 : 한글, 영어, 숫자만 허용 (공백, 특수문자 제거)
//String pattern = "^[ㄱ-ㅎㅏ-ㅣ가-힣a-zA-Z0-9\\s]"; // 정규식 : 한글, 영어, 숫자, 공백만 허용 (특수문자 제거)
if (value != null && value.length() > 0 && value.trim().equals("") == false) { // 문자열 길이가 1개 이상인 경우
// for 반복문을 선언해서 문자 한글자씩 확인 실시
for(int i=0; i<value.length(); i++) {
if (String.valueOf(value.charAt(i)).matches(pattern)) { // 정규식 패턴을 만족하는 경우
result += value.charAt(i); // 문자열 추가
}
else { // 정규식 패턴이 아닌 경우
continue;
}
}
}
else { // 문자열 길이가 0개인 경우
result = String.valueOf(value); // 인풋값 그대로 반환
}
// 결과 반환 실시
return result;
}
// TODO [헥사 문자열 값을 바이트 배열로 반환 메소드 : Hex String convert byte array]
public static byte[] HexUtil_To_ByteArray(String data) {
/**
* // -----------------------------------------
* [HexUtil_To_ByteArray 메소드 설명]
* // -----------------------------------------
* 1. 헥사 문자열 값을 바이트 배열로 반환 메소드
* // -----------------------------------------
* 2. 호출 방법 : C_Util.HexUtil_To_ByteArray("0123456789abcdef0123456789abcdef");
* // -----------------------------------------
* 3. 리턴 데이터 : 바이트 배열 반환 실시
* // -----------------------------------------
* */
byte[] temp = new byte[data.length() / 2];
for(int i = 0; i < data.length() / 2; ++i) {
temp[i] = toByte(data.substring(i * 2, i * 2 + 2));
}
return temp;
}
public static byte toByte(String hexStr) {
byte result = 0;
String hex = hexStr.toUpperCase();
for(int i = 0; i < hex.length(); ++i) {
char c = hex.charAt(hex.length() - i - 1);
byte b = toByte(c);
result = (byte)(result | (b & 15) << i * 4);
}
return result;
}
private static byte toByte(char c) {
switch(c) {
case '0':
return 0;
case '1':
return 1;
case '2':
return 2;
case '3':
return 3;
case '4':
return 4;
case '5':
return 5;
case '6':
return 6;
case '7':
return 7;
case '8':
return 8;
case '9':
return 9;
case ':':
case ';':
case '<':
case '=':
case '>':
case '?':
case '@':
default:
return 0;
case 'A':
return 10;
case 'B':
return 11;
case 'C':
return 12;
case 'D':
return 13;
case 'E':
return 14;
case 'F':
return 15;
}
}
// TODO [두 날짜 차이 계산 수행 실시]
public static int getDateMinus(String bigDate, String smallDate) {
/**
* // -----------------------------------------
* // [getDateMinus 메소드 설명]
* // -----------------------------------------
* 1. 날짜 형식 : yyyyMMddkkmmss 24시간 형태로 구성
* // -----------------------------------------
* 2. bigDate 큰 날짜 - smallDate 작은 날짜 연산 수행
* // -----------------------------------------
* 3. 리턴 형식 : 초 , 분 , 시간 , 일자 단위 선택 (int 형 반환)
* // -----------------------------------------
* 4. 인풋 예시 :
* - C_Util.getDateMinus("2022 02 10 18 30 15", "2022 02 10 18 30 15"); // 동일
*
* - C_Util.getDateMinus("2022 02 10 18 30 15", "2022 02 10 18 30 10"); // 초 [다름]
* - C_Util.getDateMinus("2022 02 10 18 30 15", "2022 02 10 18 25 15"); // 분 [다름]
* - C_Util.getDateMinus("2022 02 10 18 30 15", "2022 02 10 17 30 15"); // 시간 [다름]
* - C_Util.getDateMinus("2022 02 10 18 30 15", "2022 02 09 18 30 15"); // 일자 [다름]
* - C_Util.getDateMinus("2022 02 10 18 30 15", "2022 01 10 18 30 15"); // 월 [다름]
* - C_Util.getDateMinus("2022 02 10 18 30 15", "2021 02 10 18 30 15"); // 연도 [다름]
* // -----------------------------------------
* */
// [초기 리턴 데이터 선언]
int returnData = 0;
// [인풋으로 들어온 값에 공백이 있는 경우 제거 실시]
bigDate = bigDate.replaceAll(" ", "");
smallDate = smallDate.replaceAll(" ", "");
// [인풋으로 들어온 값 널 데이터 검증 실시]
try {
if (bigDate != null && bigDate.length()>0 && !bigDate.equals("") && !bigDate.trim().equals("null")
&& smallDate != null && smallDate.length()>0 && !smallDate.equals("") && !smallDate.trim().equals("null")){ // [정상 데이터 인 경우]
// [인풋으로 들어온 데이터가 int 형 인지 검증 수행]
boolean bigDate_NotNumber = false;
boolean smallDate_NotNumber = false;
for(int i=0; i<bigDate.length(); i++) {
if(Character.isDigit(bigDate.charAt(i)) == false) { // 숫자가 아닌 경우
bigDate_NotNumber = true;
}
}
for(int j=0; j<smallDate.length(); j++) {
if(Character.isDigit(smallDate.charAt(j)) == false) { // 숫자가 아닌 경우
smallDate_NotNumber = true;
}
}
if (bigDate_NotNumber == true || smallDate_NotNumber == true){ // 문자가 포함된 데이터 인 경우
Log.i("---","---");
Log.e("//===========//","================================================");
Log.i("","\n"+"[C_Util >> getDateMinus() :: 두 날짜 차이 계산 에러]");
Log.i("","\n"+"[bigDate [인풋 날짜_1] :: "+String.valueOf(bigDate)+"]");
Log.i("","\n"+"[smallDate [인풋 날짜_2] :: "+String.valueOf(smallDate)+"]");
Log.i("","\n"+"[error [문자 에러] :: "+"비정상 데이터"+"]");
Log.e("//===========//","================================================");
Log.i("---","---");
return returnData;
}
// [로직 처리 수행 실시]
Date bigFormat = new SimpleDateFormat("yyyyMMddkkmmss").parse(bigDate);
Date smallFormat = new SimpleDateFormat("yyyyMMddkkmmss").parse(smallDate);
// [초, 분, 시간, 일자 차이 계산 실시 >> long 타입]
long minusSec = (bigFormat.getTime() - smallFormat.getTime()) / 1000; // [초]
long minusMin = (bigFormat.getTime() - smallFormat.getTime()) / 60000; // [분]
long minusHour = (bigFormat.getTime() - smallFormat.getTime()) / 3600000; // [시간]
long minusDay = minusSec / (24*60*60); // [일자]
Log.i("---","---");
Log.w("//===========//","================================================");
Log.i("","\n"+"[C_Util >> getDateMinus() :: 두 날짜 차이 결과 확인]");
Log.i("","\n"+"---------------------");
Log.i("","\n"+"[bigDate [인풋 날짜_1] :: "+String.valueOf(bigDate)+"]");
Log.i("","\n"+"[smallDate [인풋 날짜_2] :: "+String.valueOf(smallDate)+"]");
Log.i("","\n"+"---------------------");
Log.i("","\n"+"[minusSec [초] 차이 :: "+String.valueOf(minusSec)+"]");
Log.i("","\n"+"---------------------");
Log.i("","\n"+"[minusMin [분] 차이 :: "+String.valueOf(minusMin)+"]");
Log.i("","\n"+"---------------------");
Log.i("","\n"+"[minusHour [시간] 차이 :: "+String.valueOf(minusHour)+"]");
Log.i("","\n"+"---------------------");
Log.i("","\n"+"[minusDay [날짜] 차이 :: "+String.valueOf(minusDay)+"]");
Log.w("//===========//","================================================");
Log.i("---","---");
// [리턴하려는 값을 선택 후 결과 반환]
returnData = (int) minusMin; // [분]
//returnData = (int) minusSec; // [초]
}
else { // [비정상 데이터 인 경우]
Log.i("---","---");
Log.e("//===========//","================================================");
Log.i("","\n"+"[C_Util >> getDateMinus() :: 두 날짜 차이 계산 에러]");
Log.i("","\n"+"[bigDate [인풋 날짜_1] :: "+String.valueOf(bigDate)+"]");
Log.i("","\n"+"[smallDate [인풋 날짜_2] :: "+String.valueOf(smallDate)+"]");
Log.i("","\n"+"[error [널 에러] :: "+"비정상 데이터"+"]");
Log.e("//===========//","================================================");
Log.i("---","---");
}
}
catch (Exception e){
Log.i("---","---");
Log.e("//===========//","================================================");
Log.i("","\n"+"[C_Util >> getDateMinus() :: 두 날짜 차이 계산 에러]");
Log.i("","\n"+"[bigDate [인풋 날짜_1] :: "+String.valueOf(bigDate)+"]");
Log.i("","\n"+"[smallDate [인풋 날짜_2] :: "+String.valueOf(smallDate)+"]");
Log.i("","\n"+"[catch [에러] :: "+String.valueOf(e.getMessage())+"]");
Log.e("//===========//","================================================");
Log.i("---","---");
}
// [리턴 데이터 반환 실시]
return returnData;
}
// TODO [현재 사용중인 최상위 액티비티 명 확인]
public static String getNowUseActivity(Context mContext){
/**
* // -----------------------------------------
* [getNowUseActivity 메소드 설명]
* // -----------------------------------------
* 1. 현재 사용중인 최상위 액티비티 명 확인
* // -----------------------------------------
* 2. 호출 방법 : C_Util.getNowUseActivity(A_Main.this);
* // -----------------------------------------
* 3. 리턴 데이터 : 현재 실행 중인 액티비티 클래스 명
* // -----------------------------------------
* 4. 참고 : [특정 클래스에서 본인 클래스명 확인 방법] : getClass().getName()
* // -----------------------------------------
* */
// [초기 리턴 결과 반환 변수 선언 실시]
String returnActivityName = "";
try {
ActivityManager manager = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);
String className = "";
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
className = String.valueOf(manager.getAppTasks().get(0).getTaskInfo().topActivity.getClassName());
}
else {
List<ActivityManager.RunningTaskInfo> info = manager.getRunningTasks(1);
ComponentName componentName= info.get(0).topActivity;
className = componentName.getClassName();
}
Log.i("---","---");
Log.w("//===========//","================================================");
Log.i("","\n"+"[C_Util >> getNowUseActivity() :: 현재 사용 중인 최상위 액티비티 확인]");
Log.i("","\n"+"[className :: "+String.valueOf(className)+"]");
Log.w("//===========//","================================================");
Log.i("---","---");
// [리턴 반환 데이터 삽입 실시]
returnActivityName = className;
}
catch (Exception e){
//e.printStackTrace();
Log.i("---","---");
Log.e("//===========//","================================================");
Log.i("","\n"+"[C_Util >> getNowUseActivity() :: 현재 사용 중인 최상위 액티비티 확인]");
Log.i("","\n"+"[catch [에러] :: "+String.valueOf(e.getMessage())+"]");
Log.e("//===========//","================================================");
Log.i("---","---");
}
// [리턴 결과 반환 수행 실시]
return returnActivityName;
}
// TODO [타임 스탬프 값을 날짜 형식으로 변환 실시]
public static String getTimeStamp_To_Date(Context mContext, String timeStamp){
/**
* // -----------------------------------------
* [getTimeStamp_To_Date 메소드 설명]
* // -----------------------------------------
* 1. Timestamp 값은 현재 시간을 milliseconds 단위로 변환하여 보여줍니다
* // -----------------------------------------
* 2. 인풋 타임 스탬프 형식 : 1646295046677
* // -----------------------------------------
* 3. 리턴 데이터 : 20220321134530 (24 시간 날짜 형식)
* // -----------------------------------------
* 4. 타임 스탬프 (밀리세컨드 만드는 형식)
* - Timestamp timestamp = new Timestamp(System.currentTimeMillis()); // 현재 날짜
* - timestamp.getTime(); // 타임 스탬프 밀리 세컨드
* // -----------------------------------------
* */
// [초기 리턴 결과 반환 변수 선언 실시]
String returnDate = "";
try {
// [인풋 데이터 널 체크 수행 실시]
if (timeStamp != null && timeStamp.length()>0 && !timeStamp.trim().equals("") && !timeStamp.trim().equals("null")){
// [타임 스탬프 값 (1646295046677) 을 Date 로 변경]
Date date = new Date(Long.parseLong(timeStamp));
// [타임 스탬프 값을 포맷 Date 형식으로 변경]
SimpleDateFormat sdf = new SimpleDateFormat ("yyyyMMddkkmmss");
// [결과 출력 실시]
Log.i("---","---");
Log.w("//===========//","================================================");
Log.i("","\n"+"[C_Util >> getTimeStamp_To_Date() :: 타임 스탬프 >> Date 형 변환 실시]");
Log.i("","\n"+"[타임 스탬프 :: "+String.valueOf(timeStamp)+"]");
Log.i("","\n"+"[날 짜 :: "+String.valueOf(sdf.format(date))+"]");
Log.w("//===========//","================================================");
Log.i("---","---");
// [리턴 데이터에 날짜 삽입 실시]
returnDate = String.valueOf(sdf.format(date));
}
else {
Log.i("---","---");
Log.e("//===========//","================================================");
Log.i("","\n"+"[C_Util >> getTimeStamp_To_Date() :: 타임 스탬프 >> Date 형 변환 실시]");
Log.i("","\n"+"[타임 스탬프 :: "+String.valueOf(timeStamp)+"]");
Log.i("","\n"+"[error [에러] :: "+String.valueOf("NULL")+"]");
Log.e("//===========//","================================================");
Log.i("---","---");
}
}
catch (Exception e){
//e.printStackTrace();
Log.i("---","---");
Log.e("//===========//","================================================");
Log.i("","\n"+"[C_Util >> getTimeStamp_To_Date() :: 타임 스탬프 >> Date 형 변환 실시]");
Log.i("","\n"+"[catch [에러] :: "+String.valueOf(e.getMessage())+"]");
Log.e("//===========//","================================================");
Log.i("---","---");
}
// [리턴 결과 반환 수행 실시]
return returnDate;
}
// TODO [String 문자열 데이터 널 판단 실시]
public static Boolean stringNotNull(String data){
/**
* // -----------------------------------------
* [stringNotNull 메소드 설명]
* // -----------------------------------------
* 1. String 문자열 데이터 널 판단 실시
* // -----------------------------------------
* 2. 호출 방식 : C_Util.stringNotNull("twok");
* // -----------------------------------------
* 3. 리턴 데이터 : 문자열 데이터가 널이 아닌 경우 true / 널인 경우 false
* // -----------------------------------------
* */
// [문자열 데이터 널 판단 수행 실시]
try {
if (data != null
&& data.length()>0
&& data.trim().equals("") == false
&& data.trim().equals("null") == false
&& data.trim().equals("undefined") == false){ // [널이 아닌 경우]
// [리턴 결과 반환 수행 실시]
return true;
}
else { // [널인 경우]
// [리턴 결과 반환 수행 실시]
return false;
}
}
catch (Exception e){
//e.printStackTrace();
Log.i("---","---");
Log.e("//===========//","================================================");
Log.i("","\n"+"[C_Util >> stringNotNull() :: String 문자열 데이터 널 판단 실시]");
Log.i("","\n"+"[catch [에러] :: "+String.valueOf(e.getMessage())+"]");
Log.e("//===========//","================================================");
Log.i("---","---");
// [리턴 결과 반환 수행 실시]
return false;
}
}
// TODO [String 문자열 데이터 다중 contains 포함 여부 확인 실시]
public static Boolean stringMultiContains(String data, String [] containsArray){
/**
* // -----------------------------------------
* [stringMultiContains 메소드 설명]
* // -----------------------------------------
* 1. String 문자열 데이터 다중 contains 포함 여부 확인 실시
* // -----------------------------------------
* 2. 호출 방식 : C_Util.stringMultiContains("twok,투케이,반갑습니다", new String[] {"twok", "투케이"});
* // -----------------------------------------
* 3. 리턴 데이터 : 특정 배열 값을 모두 포함하는 경우 true / 아닌 경우 false
* // -----------------------------------------
* */
// [문자열 데이터 및 배열 데이터 널 판단 수행 실시]
try {
if (data != null
&& data.length()>0
&& data.trim().equals("") == false
&& data.trim().equals("null") == false
&& data.trim().equals("undefined") == false
&& containsArray != null
&& containsArray.length>0){ // [널이 아닌 경우]
// [for 문을 수행하면서 데이터 포함 체크 수행 실시]
boolean checkContains = true;
for (int i=0; i<containsArray.length; i++){
if (data.contains(containsArray[i]) == true){
}
else {
// [하나라도 값을 포함하지 않는 경우 false 지정]
checkContains = false;
}
}
// [리턴 결과 반환 수행 실시]
return checkContains;
}
else { // [널인 경우]
// [리턴 결과 반환 수행 실시]
return false;
}
}
catch (Exception e){
//e.printStackTrace();
Log.i("---","---");
Log.e("//===========//","================================================");
Log.i("","\n"+"[C_Util >> stringMultiContains() :: String 문자열 데이터 다중 contains 포함 여부 확인 실시]");
Log.i("","\n"+"[catch [에러] :: "+String.valueOf(e.getMessage())+"]");
Log.e("//===========//","================================================");
Log.i("---","---");
// [리턴 결과 반환 수행 실시]
return false;
}
}
// TODO [String 문자열 데이터를 Json Object 형식으로 변경 가능 한지 체크 실시]
public static Boolean stringJsonObjectEnable(String data){
/**
* // -----------------------------------------
* [stringJsonObjectEnable 메소드 설명]
* // -----------------------------------------
* 1. String 문자열 데이터를 Json Object 형식으로 변경 가능한지 확인 실시
* // -----------------------------------------
* 2. 호출 방식 : C_Util.stringJsonObjectEnable(json 형식 문자열 데이터);
* // -----------------------------------------
* 3. 리턴 데이터 : Json 형식으로 변경 가능한 경우 true / 아닌 경우 false
* // -----------------------------------------
* 4. 참고 : 일반 자바 main 에서 수행 시 안드로이드 JSONObject 찾지 못함 [안드로이드 용으로 사용]
* // -----------------------------------------
* */
// [리턴 데이터 변수 선언 실시]
boolean result = false;
// [문자열 데이터 널 판단 수행 실시]
if (data != null
&& data.length()>0
&& data.trim().equals("") == false
&& data.trim().equals("null") == false
&& data.trim().equals("undefined") == false){ // [널이 아닌 경우]
// [Json Object 형식으로 변경 가능한지 확인 실시]
try {
JSONObject checkJson = new JSONObject(String.valueOf(data));
// [리턴 데이터 삽입 실시]
result = true;
}
catch (Exception e){
// [Json Object 변환 에러 발생]
// e.printStackTrace();
// [리턴 데이터 삽입 실시]
result = false;
}
}
else { // [널인 경우]
// [리턴 데이터 삽입 실시]
result = false;
}
// [로그 출력 실시]
///*
Log.i("---","---");
Log.d("//===========//","================================================");
Log.i("","\n"+"[C_Util >> stringJsonObjectEnable() :: String 문자열 데이터 Json Object 변환 결과]");
Log.i("","\n"+"[input :: "+String.valueOf(data)+"]");
Log.i("","\n"+"[result :: "+String.valueOf(result)+"]");
Log.d("//===========//","================================================");
Log.i("---","---");
// */
// [리턴 데이터 반환 실시]
return result;
}
// TODO [배열 형식 String 문자열 데이터를 ArrayList 로 반환 실시]
public static ArrayList arrayListStringToArrayList(String data){
/**
* // -----------------------------------------
* [arrayListStringToArrayList 메소드 설명]
* // -----------------------------------------
* 1. 배열 형식 String 문자열 데이터를 ArrayList 로 반환 실시
* // -----------------------------------------
* 2. 호출 방식 : C_Util.arrayListStringToArrayList("[투케이, 29]");
* // -----------------------------------------
* 3. 리턴 데이터 : ArrayList 로 반환 실시
* // -----------------------------------------
* */
// [리턴 데이터 변수 선언 실시]
ArrayList result = new ArrayList<>();
String arrayString = "";
// [문자열 데이터 널 판단 수행 실시]
if (data != null
&& data.length()>0
&& data.trim().equals("") == false
&& data.trim().equals("null") == false
&& data.trim().equals("undefined") == false){ // [널이 아닌 경우]
try {
// [인풋으로 들어온 데이터 삽입]
arrayString = String.valueOf(data.trim());
// [배열 형식 데이터를 파싱하기 위해 포맷 수행 실시]
if (arrayString.startsWith("[") == true && arrayString.endsWith("]") == true){
// [문자열 데이터 포맷]
arrayString = arrayString.substring(1, arrayString.length()-1);
arrayString = arrayString.replaceAll(", ", ",");
// [split 사용해서 문자열 파싱]
String [] parsingArray = arrayString.split(",");
for (int i=0; i<parsingArray.length; i++){
parsingArray[i] = parsingArray[i].trim();
}
// [ArrayList 에 배열 삽입 실시]
result = new ArrayList(Arrays.asList(parsingArray));
}
}
catch (Exception e){
e.printStackTrace();
}
}
// [로그 출력 실시]
///*
Log.i("---","---");
Log.d("//===========//","================================================");
Log.i("","\n"+"[C_Util >> arrayListStringToArrayList() :: 배열 형식 String 문자열 데이터를 ArrayList 로 반환 실시]");
Log.i("","\n"+"[input :: "+String.valueOf(data)+"]");
Log.i("","\n"+"[format :: "+String.valueOf(arrayString)+"]");
Log.i("","\n"+"[result :: "+String.valueOf(result.toString())+"]");
Log.d("//===========//","================================================");
Log.i("---","---");
// */
// [리턴 데이터 반환 실시]
return result;
}
// TODO [html 형식 태그 제거 문자열 데이터 반환]
public static String htmlTagRemoveString(String data){
/**
* // -----------------------------------------
* [htmlTagRemoveString 메소드 설명]
* // -----------------------------------------
* 1. html 형식 태그 제거 문자열 데이터 반환
* // -----------------------------------------
* 2. 호출 방식 :
* String data = "<p>test url</p><p><a href="https://www.naver.com">https://www.naver.com</a></p><p>&nbsp;</p><p>입니다</p><p>&nbsp;</p>";
*
* C_Util.htmlTagRemoveString(data);
* // -----------------------------------------
* 3. 리턴 데이터 : html 형식 태그 제거 문자열 반환
* // -----------------------------------------
* */
// [리턴 데이터 변수 선언 실시]
String result = "";
// [문자열 데이터 널 판단 수행 실시]
if (data != null
&& data.length()>0
&& data.trim().equals("") == false
&& data.trim().equals("null") == false
&& data.trim().equals("undefined") == false){ // [널이 아닌 경우]
try {
// [html 태그 1차 제거 실시]
result = Html.fromHtml(data).toString();
// [html 태그 2차 제거 위해 [&] 이스케이프 문자 카운트 실시]
int checkCount = 0;
for (int i=0; i<result.length(); i++){
if (result.charAt(i) == '&'){
checkCount ++;
}
}
if (checkCount > 0){
for (int k=0; k<checkCount; k++){
// [html 태그 엔티티 문자 제거 실시]
result = Html.fromHtml(result).toString();
}
}
// [html 태그 연속 공백 제거 실시]
result = result.replaceAll("\\s+", " ");
// [문자열 양쪽 끝 공백 제거 실시]
result = result.trim();
}
catch (Exception e){
e.printStackTrace();
}
}
// [로그 출력 실시]
///*
Log.i("---","---");
Log.d("//===========//","================================================");
Log.i("","\n"+"[C_Util >> htmlTagRemoveString() :: html 형식 태그 제거 문자열 데이터 반환 실시]");
Log.i("","\n"+"[input :: "+String.valueOf(data)+"]");
Log.i("","\n"+"[result :: "+String.valueOf(result.toString())+"]");
Log.d("//===========//","================================================");
Log.i("---","---");
// */
// [리턴 데이터 반환 실시]
return result;
}
// TODO [html 형식 태그 제거 문자열 데이터 반환]
public static String htmlTagRemoveString_2(String data){
/**
* // -----------------------------------------
* [htmlTagRemoveString_2 메소드 설명]
* // -----------------------------------------
* 1. html 형식 태그 제거 문자열 데이터 반환
* // -----------------------------------------
* 2. 호출 방식 :
* String data = "<p>test url</p><p><a href="https://www.naver.com">https://www.naver.com</a></p><p>&nbsp;</p><p>입니다</p><p>&nbsp;</p>";
*
* C_Util.htmlTagRemoveString_2(data);
* // -----------------------------------------
* 3. 리턴 데이터 : html 형식 태그 제거 문자열 반환
* // -----------------------------------------
* */
// [리턴 데이터 변수 선언 실시]
String result = "";
// [문자열 데이터 널 판단 수행 실시]
if (data != null
&& data.length()>0
&& data.trim().equals("") == false
&& data.trim().equals("null") == false
&& data.trim().equals("undefined") == false){ // [널이 아닌 경우]
try {
// [html 태그를 제거 하기 위한 패턴 정의 실시]
String tag_pattern = "<(/)?([a-zA-Z]*)(\\s[a-zA-Z]*=[^>]*)?(\\s)*(/)?>"; // [<p> 등 태그 제거]
Pattern num_reg_entity_pattern = Pattern.compile("&#[0-9]+;"); // [	 형태 제거]
Pattern char_reg_entity_pattern = Pattern.compile("&[a-zA-Z]+;"); // [& 형태 제거]
Pattern char_normal_entity_pattern = Pattern.compile(" [a-zA-Z]+;"); // [amp; 형태 제거]
// [html 태그 1차 제거 실시]
result = data.replaceAll(tag_pattern, " ");
// [html 태그 2차 제거 실시]
Matcher num_reg_mat = num_reg_entity_pattern.matcher(result);
result = num_reg_mat.replaceAll("");
Matcher char_reg_mat = char_reg_entity_pattern.matcher(result);
result = char_reg_mat.replaceAll("");
Matcher char_normal_mat = char_normal_entity_pattern.matcher(result);
result = char_normal_mat.replaceAll("");
// [html 태그 연속 공백 제거 실시]
result = result.replaceAll("\\s+", " ");
// [문자열 양쪽 끝 공백 제거 실시]
result = result.trim();
}
catch (Exception e){
e.printStackTrace();
}
}
// [로그 출력 실시]
///*
Log.i("---","---");
Log.d("//===========//","================================================");
Log.i("","\n"+"[C_Util >> htmlTagRemoveString_2() :: html 형식 태그 제거 문자열 데이터 반환 실시]");
Log.i("","\n"+"[input :: "+String.valueOf(data)+"]");
Log.i("","\n"+"[result :: "+String.valueOf(result.toString())+"]");
Log.d("//===========//","================================================");
Log.i("---","---");
// */
// [리턴 데이터 반환 실시]
return result;
}
// TODO [string 문자열 데이터를 byte 배열 값으로 반환]
public static byte[] stringToByte(String data){
/**
* // -----------------------------------------
* [stringToByte 메소드 설명]
* // -----------------------------------------
* 1. string 문자열 데이터를 byte 배열 값으로 반환 수행
* // -----------------------------------------
* 2. 호출 방식 : C_Util.stringToByte("hello");
* // -----------------------------------------
* 3. 리턴 데이터 : byte array 바이트 배열 데이터
* // -----------------------------------------
* */
// [리턴 데이터 변수 선언 실시]
byte result[] = null;
// [문자열 데이터 널 판단 수행 실시]
if (data != null
&& data.length()>0
&& data.trim().equals("") == false
&& data.trim().equals("null") == false
&& data.trim().equals("undefined") == false){ // [널이 아닌 경우]
try {
result = data.getBytes("UTF-8");
}
catch (Exception e){
e.printStackTrace();
}
}
// [로그 출력 실시]
///*
Log.i("---","---");
Log.d("//===========//","================================================");
Log.i("","\n"+"[C_Util >> stringToByte() :: string 문자열 데이터를 byte 배열 값으로 반환 실시]");
Log.i("","\n"+"[input :: "+String.valueOf(data)+"]");
Log.i("","\n"+"[result :: "+String.valueOf(Arrays.toString(result))+"]");
Log.d("//===========//","================================================");
Log.i("---","---");
// */
// [리턴 데이터 반환 실시]
return result;
}
// TODO [byte 배열 값을 string 문자열 데이터로 반환]
public static String byteToString(byte[] data){
/**
* // -----------------------------------------
* [byteToString 메소드 설명]
* // -----------------------------------------
* 1. byte 배열 값을 string 문자열 데이터로 반환
* // -----------------------------------------
* 2. 호출 방식 : C_Util.byteToString(new byte[] {104, 101, 108, 108, 111});
* // -----------------------------------------
* 3. 리턴 데이터 : string 문자열 데이터
* // -----------------------------------------
* */
// [리턴 데이터 변수 선언 실시]
String result = "";
// [데이터 널 판단 수행 실시]
if (data != null
&& data.length>0){ // [널이 아닌 경우]
try {
result = new String(data, "UTF-8");
}
catch (Exception e){
e.printStackTrace();
}
}
// [로그 출력 실시]
///*
Log.i("---","---");
Log.d("//===========//","================================================");
Log.i("","\n"+"[C_Util >> byteToString() :: byte 배열 값을 string 문자열 데이터로 반환 실시]");
Log.i("","\n"+"[input :: "+String.valueOf(Arrays.toString(data))+"]");
Log.i("","\n"+"[result :: "+String.valueOf(result)+"]");
Log.d("//===========//","================================================");
Log.i("---","---");
// */
// [리턴 데이터 반환 실시]
return result;
}
// TODO [string 문자열 데이터에서 특정 문자 개수 카운트 반환]
public static int stringCount(String stringData, String charData){
/**
* // -----------------------------------------
* [stringCount 메소드 설명]
* // -----------------------------------------
* 1. string 문자열 데이터에서 특정 문자 개수 카운트 반환
* // -----------------------------------------
* 2. 호출 방식 : C_Util.stringCount("hello,TWOK,투케이", ",");
* // -----------------------------------------
* 3. 리턴 데이터 : 특정 문자 개수 카운트 반환 실시
* // -----------------------------------------
* */
// [리턴 데이터 변수 선언 실시]
int result = 0;
// [인풋 데이터 널 판단 수행 실시]
if (stringData != null
&& stringData.length()>0
&& stringData.trim().equals("") == false
&& stringData.trim().equals("null") == false
&& stringData.trim().equals("undefined") == false
&& charData != null
&& charData.length() == 1
&& charData.trim().equals("") == false
&& charData.trim().equals("null") == false
&& charData.trim().equals("undefined") == false ){ // [널이 아닌 경우]
try {
// [인풋으로 들어온 문자열 데이터 배열에 삽입 실시]
String array[] = stringData.split("");
// [for 문을 돌면서 특정 문자 포함 확인]
for (int i=0; i<array.length; i++){
if (String.valueOf(array[i]).equals(charData)){
result = result + 1;
}
}
}
catch (Exception e){
e.printStackTrace();
}
}
// [로그 출력 실시]
///*
Log.i("---","---");
Log.d("//===========//","================================================");
Log.i("","\n"+"[C_Util >> stringCount() :: string 문자열 데이터에서 특정 문자 개수 카운트 반환 실시]");
Log.i("","\n"+"[input [string] :: "+String.valueOf(stringData)+"]");
Log.i("","\n"+"[input [char] :: "+String.valueOf(charData)+"]");
Log.i("","\n"+"[result [count] :: "+String.valueOf(result)+"]");
Log.d("//===========//","================================================");
Log.i("---","---");
// */
// [리턴 데이터 반환 실시]
return result;
}
// TODO [ArrayList 배열 중복 데이터 제거 실시]
public static ArrayList removeArrayOverlap(ArrayList list){
/**
* // -----------------------------------------
* [removeArrayOverlap 메소드 설명]
* // -----------------------------------------
* 1. 배열 중복 데이터 제거 메소드
* // -----------------------------------------
* 2. 호출 방식 :
* ArrayList list = new ArrayList();
* list.add("하나");
* list.add("둘");
* list.add("하나");
*
* C_Util.removeArrayOverlap(list);
* // -----------------------------------------
* 3. 리턴 데이터 : 중복 제거된 배열 데이터 반환 실시
* // -----------------------------------------
* */
// [리턴 데이터 변수 선언 실시]
ArrayList returnArray = new ArrayList();
// [인풋 데이터 널 판단 수행 실시]
if (list != null
&& list.size()>0
&& list.isEmpty() == false){ // [널이 아닌 경우]
try {
// [HashSet 을 사용해 ArrayList 배열 데이터 중복 제거 실시]
HashSet hashSet = new HashSet<>(list);
// [HashSet to ArrayList 변환 실시]
returnArray = new ArrayList(hashSet);
}
catch (Exception e){
e.printStackTrace();
}
}
// [로그 출력 실시]
///*
Log.i("---","---");
Log.d("//===========//","================================================");
Log.i("","\n"+"[C_Util >> removeArrayOverlap() :: ArrayList 배열 중복 데이터 제거 실시]");
Log.i("","\n"+"[input :: "+String.valueOf(list.toString())+"]");
Log.i("","\n"+"[result :: "+String.valueOf(returnArray.toString())+"]");
Log.d("//===========//","================================================");
Log.i("---","---");
// */
// [리턴 데이터 반환 실시]
return returnArray;
}
// TODO [String 문자열 데이터가 모두 정수 값으로 구성되어 있는지 확인 실시]
public static Boolean stringIsNumber(String data){
/**
* // -----------------------------------------
* [stringIsNumber 메소드 설명]
* // -----------------------------------------
* 1. String 문자열 데이터가 모두 정수 값으로 구성되어 있는지 확인 실시
* // -----------------------------------------
* 2. 호출 방식 :
* C_Util.stringIsNumber("12345");
* C_Util.stringIsNumber("-12345");
* C_Util.stringIsNumber("123hello");
* // -----------------------------------------
* 3. 리턴 데이터 : string 문자열 데이터가 모두 정수값으로 된 경우 true / 아니면 false
* // -----------------------------------------
* */
// [리턴 데이터 변수 선언 실시]
boolean result = true;
// [문자열 데이터 널 판단 수행 실시]
if (data != null
&& data.length()>0
&& data.trim().equals("") == false
&& data.trim().equals("null") == false
&& data.trim().equals("undefined") == false){ // [널이 아닌 경우]
// [Character.isDigit 사용해 정수값 체크 실시]
try {
for (int i=0; i<data.length(); i++){
if (Character.isDigit(data.charAt(i)) == true){ // [숫자]
}
else { // [문자]
if (i == 0 && data.charAt(i) == '-' || data.charAt(i) == '+') { // [처음 문자가 - , + 인 경우는 통과 실시]
}
else {
// [리턴 데이터 삽입 실시]
result = false;
}
}
}
}
catch (Exception e){
// [Json Object 변환 에러 발생]
// e.printStackTrace();
// [리턴 데이터 삽입 실시]
result = false;
}
}
else { // [널인 경우]
// [리턴 데이터 삽입 실시]
result = false;
}
// [로그 출력 실시]
///*
Log.i("---","---");
Log.d("//===========//","================================================");
Log.i("","\n"+"[C_Util >> stringIsNumber() :: string 문자열 데이터 모두 정수 값 구성 여부 확인 실시]");
Log.i("","\n"+"[input :: "+String.valueOf(data)+"]");
Log.i("","\n"+"[result :: "+String.valueOf(result)+"]");
Log.d("//===========//","================================================");
Log.i("---","---");
// */
// [리턴 데이터 반환 실시]
return result;
}
// TODO [Double 소수점 데이터를 특정 소수점 자릿수 기준으로 자르기 실시]
public static String doubleCutLength(double doubleData, int length){
/**
* // -----------------------------------------
* [doubleCutLength 메소드 설명]
* // -----------------------------------------
* 1. Double 소수점 데이터를 특정 소수점 자릿수 기준으로 자르기 실시 [반올림 없음]
* // -----------------------------------------
* 2. 호출 방식 :
* C_Util.doubleCutLength(123.4567, 2);
* C_Util.doubleCutLength(-123.4567, 2);
* // -----------------------------------------
* 3. 리턴 데이터 : 123.45 : 소수점 특정 자릿수 기준 제한 문자열 데이터
* // -----------------------------------------
* */
// [리턴 데이터 변수 선언 실시]
String result = "";
// [인풋 데이터 체크 수행 실시]
if (length >= 0){ // [0 자릿수 이상 들어온 경우]
try {
// [필요 변수 선언 실시]
int dotCount = 0; // 점 개수
int dotLocation = 0; // 점 위치
int dotLength = 0; // 소수점 이하 자릿수 기준
// [for 문을 돌면서 데이터 확인 실시]
String strData = String.valueOf(doubleData);
for (int i=0; i<strData.length(); i++){
if (strData.charAt(i) == '.'){ // 문자열 특정 자릿수가 점 (.) 인 경우
dotCount = dotCount + 1; // 카운트 증가
dotLocation = i; // 위치 지정
String subString = strData.substring((dotLocation + 1), strData.length());
dotLength = subString.length(); // 소수점 이하 자릿수 확인
}
}
/*
Log.i("---","---");
Log.d("//===========//","================================================");
Log.i("","\n"+"[C_Util >> doubleCutLength() :: Double 소수점 데이터를 특정 소수점 자릿수 기준으로 자르기 실시]");
Log.i("","\n"+"[dotCount [소수점 개수] :: "+String.valueOf(dotCount)+"]");
Log.i("","\n"+"[dotLocation [소수점 위치] :: "+String.valueOf(dotLocation)+"]");
Log.i("","\n"+"[dotLength [소수점 이하 자릿수] :: "+String.valueOf(dotLength)+"]");
Log.d("//===========//","================================================");
Log.i("---","---");
// */
// [정상적으로 소수점이 포함된 경우]
if (dotCount == 1){
if (length > dotLength){ // [원본 데이터 보다 인풋값이 큰 경우 >> 0 값으로 채움]
result = strData.substring(0, strData.length());
int zeroCount = length - dotLength;
for (int j=0; j<zeroCount; j++){
result = result + "0";
}
}
else {
if (length == 0){
result = strData.substring(0, (dotLocation + length));
}
else {
result = strData.substring(0, (dotLocation + length + 1));
}
}
}
}
catch (Exception e){
e.printStackTrace();
}
}
// [로그 출력 실시]
///*
Log.i("---","---");
Log.d("//===========//","================================================");
Log.i("","\n"+"[C_Util >> doubleCutLength() :: Double 소수점 데이터를 특정 소수점 자릿수 기준으로 자르기 실시]");
Log.i("","\n"+"[input [double] :: "+String.valueOf(doubleData)+"]");
Log.i("","\n"+"[input [length] :: "+String.valueOf(length)+"]");
Log.i("","\n"+"[result [string] :: "+String.valueOf(result)+"]");
Log.d("//===========//","================================================");
Log.i("---","---");
// */
// [리턴 데이터 반환 실시]
return result;
}
// TODO [인풋으로 들어온 배열 데이터 중 부분 배열 데이터 반환 실시]
public static ArrayList arraySubList(ArrayList list, int startIdx, int endIdx){
/**
* // -----------------------------------------
* [arraySubList 메소드 설명]
* // -----------------------------------------
* 1. 인풋으로 들어온 배열 데이터 중 부분 배열 데이터 반환 실시
* // -----------------------------------------
* 2. 호출 방식 :
* ArrayList list = new ArrayList();
* list.add("하나");
* list.add("둘");
* list.add("셋");
* list.add("넷");
* list.add("다섯");
*
* C_Util.arraySubList(list, 0, list.size()-1); // [배열 전체 데이터]
* C_Util.arraySubList(list, 1, 3); // [배열 부분 데이터 : 1, 2, 3 인덱스 데이터 출력]
* // -----------------------------------------
* 3. 리턴 데이터 : [하나, 둘, 셋, 넷, 다섯] / [둘, 셋, 넷]
* // -----------------------------------------
* */
// [리턴 데이터 변수 선언 실시]
ArrayList result = new ArrayList();
// [인풋 데이터 체크 수행 실시]
if (list != null && list.size()>0
&& startIdx >= 0 && startIdx <= endIdx
&& endIdx >= 0 && endIdx >= startIdx){
try {
// [subList 를 사용해 배열 자르기 수행 실시]
result = new ArrayList(list.subList(startIdx, (endIdx+1)));
}
catch (Exception e){
e.printStackTrace();
}
}
// [로그 출력 실시]
///*
Log.i("---","---");
Log.d("//===========//","================================================");
Log.i("","\n"+"[C_Util >> arraySubList() :: ArrayList 부분 배열 데이터 반환 실시]");
Log.i("","\n"+"--------------------------------");
Log.i("","\n"+"[input [list] :: "+String.valueOf(list.toString())+"]");
Log.i("","\n"+"[input [startIdx] :: "+String.valueOf(startIdx)+"]");
Log.i("","\n"+"[input [endIdx] :: "+String.valueOf(endIdx)+"]");
Log.i("","\n"+"--------------------------------");
Log.i("","\n"+"[result [length] :: "+String.valueOf(result.size())+"]");
Log.i("","\n"+"[result [list] :: "+String.valueOf(result)+"]");
Log.d("//===========//","================================================");
Log.i("---","---");
// */
// [리턴 데이터 반환 실시]
return result;
}
// TODO [ArrayList 배열 데이터 교집합 수행 실시]
public static ArrayList arrayIntersect(ArrayList array_1, ArrayList array_2){
/**
* // -----------------------------------------
* [arrayIntersect 메소드 설명]
* // -----------------------------------------
* 1. ArrayList 배열 데이터 교집합 수행 실시
* // -----------------------------------------
* 2. 호출 방식 :
* ArrayList list_1 = new ArrayList();
* list_1.add("하나");
* list_1.add("둘");
* list_1.add("셋");
*
* ArrayList list_2 = new ArrayList();
* list_2.add("둘");
* list_2.add("셋");
* list_2.add("넷");
*
* C_Util.arrayIntersect(list_1, list_2);
* // -----------------------------------------
* 3. 리턴 데이터 : [둘, 셋]
* // -----------------------------------------
* */
// [리턴 데이터 변수 선언 실시]
ArrayList result = new ArrayList();
// [원본 데이터 저장]
ArrayList original = new ArrayList();
// [인풋 데이터 체크 수행 실시]
if (array_1 != null && array_1.size()>0 && array_1.isEmpty() == false
&& array_2 != null && array_2.size()>0 && array_2.isEmpty() == false){
try {
// [원본 데이터 저장 실시]
original = new ArrayList(array_1);
// [retainAll 사용해 배열 데이터 교집합 실시]
array_1.retainAll(array_2);
result = new ArrayList(array_1);
}
catch (Exception e){
e.printStackTrace();
}
}
// [로그 출력 실시]
///*
Log.i("---","---");
Log.d("//===========//","================================================");
Log.i("","\n"+"[C_Util >> arrayIntersect() :: ArrayList 배열 데이터 교집합 수행 실시]");
Log.i("","\n"+"--------------------------------");
Log.i("","\n"+"[input [array_1] :: "+String.valueOf(original)+"]");
Log.i("","\n"+"--------------------------------");
Log.i("","\n"+"[input [array_2] :: "+String.valueOf(array_2)+"]");
Log.i("","\n"+"--------------------------------");
Log.i("","\n"+"[result :: "+String.valueOf(result)+"]");
Log.d("//===========//","================================================");
Log.i("---","---");
// */
// [리턴 데이터 반환 실시]
return result;
}
// TODO [파일 확장자 검사 수행 실시]
public static String urlFileExtensionName(String data){
/**
* // -----------------------------------------
* [urlFileExtensionName 메소드 설명]
* // -----------------------------------------
* 1. url 형식 주소에서 파일 확장자가 포함되었는지 확인
* // -----------------------------------------
* 2. 호출 방식 :
* C_Util.urlFileExtensionName("http://img.championat.com/news/big/l/c/ujejn-runi_1439911080563855663.jpg");
* // -----------------------------------------
* 3. 리턴 데이터 : 파일 확장자 포함하는 주소인 경우 확장자 명 리턴 / 아니면 null 리턴
* jpg / null
* // -----------------------------------------
* 4. 참고 [1] : html a 태그 소스 코드
* <a href='f:http://img.championat.com/news/big/l/c/ujejn-runi_1439911080563855663.jpg' download="file"> 파일다운로드 </a>
* // -----------------------------------------
* 5. 참고 [2] : 필수 호출 방식
* a 태그 href 를 사용해 호출 할 경우 쿼리스트링 형태로 들어오면 안되고, 반드시 [주소/img.jpg] 처럼 경로 설정이 되어야함
* // -----------------------------------------
* */
// [리턴 변수 선언 실시]
String result = "";
String debug = "";
// [문자열 데이터 널 판단 수행 실시]
try {
if (data != null
&& data.length()>0
&& data.trim().equals("") == false
&& data.trim().equals("null") == false
&& data.trim().equals("undefined") == false
&& data.trim().startsWith("http") == true){ // [널이 아닌 경우]
// [파일 확장자 검사 수행 실시]
MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton();
String extension = String.valueOf(mimeTypeMap.getFileExtensionFromUrl(data.trim())); // [jpg]
String mimeType = String.valueOf(mimeTypeMap.getMimeTypeFromExtension(extension)); // [image/jpeg]
// [리턴 변수에 삽입 실시]
result = extension;
// [파일 확장자명 종료 확인]
if (result != null && result.length()>0
&& result.trim().equals("") == false && result.trim().equals("null") == false){ // [널 값이 아님 : 정상 확장자 포함]
// [디버그 삽입]
debug = "1";
}
else { // [널 인 경우]
String fileName = data.substring(data.trim().lastIndexOf('/') + 1);
String fileExt = String.valueOf(mimeTypeMap.getFileExtensionFromUrl(fileName.trim())); // [jpg]
// [리턴 변수에 삽입 실시]
result = fileExt;
}
// [쿼리 스트링에서 파일 확장자 검사 확인]
if (result != null && result.length()>0
&& result.trim().equals("") == false && result.trim().equals("null") == false){ // [널 값이 아님 : 정상 확장자 포함]
// [디버그 삽입]
debug = "2";
}
else { // [널 인 경우]
Uri uri = Uri.parse(data.trim());
String host = String.valueOf(uri.getHost()); // [호스트]
String endCheck = host + "?"; // [마지막 종료 형식 확인 위함 : 스키마 데이터 널 체크]
if (uri.getQueryParameterNames() != null
&& uri.getQueryParameterNames().size() > 0
&& data.trim().endsWith(endCheck.trim()) == false) { // KEY 값이 하나라도 포함된 경우
// [배열 순회하면서 파일 확장자 여부 값 확인 실시]
ArrayList keyList = new ArrayList(uri.getQueryParameterNames());
for (int i = 0; i < keyList.size(); i++) {
// [파일 이름 확인]
String fileExt = String.valueOf(mimeTypeMap.getFileExtensionFromUrl(uri.getQueryParameter(String.valueOf(keyList.get(i))))); // [jpg]
// [리턴 변수에 삽입 실시]
result = fileExt;
}
// [디버그 삽입]
debug = "3";
}
}
}
}
catch (Exception e){
e.printStackTrace();
}
// [로그 출력 실시]
///*
Log.i("---","---");
Log.d("//===========//","================================================");
Log.i("","\n"+"[C_Util >> urlFileExtensionName() :: URL 주소 파일 확장자 포함 확인 실시]");
Log.i("","\n"+"--------------------------------");
Log.i("","\n"+"[input :: "+String.valueOf(data)+"]");
Log.i("","\n"+"--------------------------------");
Log.i("","\n"+"[debug :: "+String.valueOf(debug)+"]");
Log.i("","\n"+"--------------------------------");
Log.i("","\n"+"[result :: "+String.valueOf(result)+"]");
Log.d("//===========//","================================================");
Log.i("---","---");
// */
// [리턴 결과 반환 실시]
return result;
}
// TODO [다운로드 매니저 사용해 파일 다운로드 수행 실시]
public static void appDownloadFile(Context mContext, String fileUrl){
/**
* // -----------------------------------------
* [appDownloadFile 메소드 설명]
* // -----------------------------------------
* 1. 파일 다운로드 수행 실시 메소드 (내장 메모리 >> 공유 Download 폴더)
* // -----------------------------------------
* 2. 호출 방식 :
* - C_Util.appDownloadFile(A_Main.this, "http://img.championat.com/news/big/l/c/ujejn-runi_1439911080563855663.jpg");
* // -----------------------------------------
* 3. 사전 설정 사항 :
* - AndroidManifest >> WRITE_EXTERNAL_STORAGE , READ_EXTERNAL_STORAGE 권한 부여
* - AndroidManifest >> application : android:requestLegacyExternalStorage="true" 옵션 설정
* // -----------------------------------------
* 4. 로직 :
* - 인풋으로 들어온 파일 주소 널 체크 수행 실시
* - AndroidManifest : WRITE_EXTERNAL_STORAGE , READ_EXTERNAL_STORAGE 권한 부여 체크
* - 현재 날짜 및 시간 확인 실시
* - DownloadManager 사용해 파일 다운로드 수행 실시
* - 파일 저장 명칭은 현재 날짜 및 시간.확장자
* // -----------------------------------------
* 5. 참고 [1] : [다운로드 폴더 경로 확인]
* File pathFoler = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
* String path = pathFoler.getPath();
* // -----------------------------------------
* 6. 참고 [2] : html a 태그 소스 코드
* <a href='f:http://img.championat.com/news/big/l/c/ujejn-runi_1439911080563855663.jpg' download="file"> 파일다운로드 </a>
* // -----------------------------------------
* */
try {
if (fileUrl != null
&& fileUrl.length()>0
&& fileUrl.trim().equals("") == false
&& fileUrl.trim().equals("null") == false
&& fileUrl.trim().equals("undefined") == false
&& fileUrl.trim().startsWith("http") == true){ // [파일 확장자 명이 널이 아닌 경우]
// [권한 부여 상태 체크 수행 실시]
if (ContextCompat.checkSelfPermission(mContext, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
// [주소에 포함된 파일 확장자명 추출 실시]
MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton();
String extension = String.valueOf(mimeTypeMap.getFileExtensionFromUrl(fileUrl.trim())); // [jpg]
String mimeType = String.valueOf(mimeTypeMap.getMimeTypeFromExtension(extension)); // [image/jpeg]
// [파일 확장자명 종료 확인]
if (extension != null && extension.length()>0
&& extension.trim().equals("") == false && extension.trim().equals("null") == false){ // [널 값이 아님 : 정상 확장자 포함]
}
else { // [널 인 경우]
String fileName = fileUrl.substring(fileUrl.trim().lastIndexOf('/') + 1);
String fileExt = String.valueOf(mimeTypeMap.getFileExtensionFromUrl(fileName.trim())); // [jpg]
// [리턴 변수에 삽입 실시]
extension = fileExt;
}
// [쿼리 스트링에서 파일 확장자 검사 확인]
if (extension != null && extension.length()>0
&& extension.trim().equals("") == false && extension.trim().equals("null") == false){ // [널 값이 아님 : 정상 확장자 포함]
}
else { // [널 인 경우]
Uri uri = Uri.parse(fileUrl.trim());
String host = String.valueOf(uri.getHost()); // [호스트]
String endCheck = host + "?"; // [마지막 종료 형식 확인 위함 : 스키마 데이터 널 체크]
if (uri.getQueryParameterNames() != null
&& uri.getQueryParameterNames().size() > 0
&& fileUrl.trim().endsWith(endCheck.trim()) == false) { // KEY 값이 하나라도 포함된 경우
// [배열 순회하면서 파일 확장자 여부 값 확인 실시]
ArrayList keyList = new ArrayList(uri.getQueryParameterNames());
for (int i = 0; i < keyList.size(); i++) {
// [파일 이름 확인]
String fileExt = String.valueOf(mimeTypeMap.getFileExtensionFromUrl(uri.getQueryParameter(String.valueOf(keyList.get(i))))); // [jpg]
// [리턴 변수에 삽입 실시]
extension = fileExt;
}
}
}
// [현재 날짜 및 시간 확인 실시]
long time = System.currentTimeMillis();
SimpleDateFormat dayTime = new SimpleDateFormat("yyyyMMddkkmmss");
String str = dayTime.format(new Date(time));
// [현재 날짜 및 시간 데이터 + 확장자명 결합 실시]
String fileName = str.trim() + "." + extension.trim();
// [파일 확장자 명 널 체크 수행 후 다운로드 실시]
if (extension != null && extension.length()>0
&& extension.trim().equals("") == false && extension.trim().equals("null") == false){ // [널 값이 아님 : 정상 확장자 포함]
// [DownloadManager 사용해 파일 다운로드 수행 실시]
DownloadManager manager = (DownloadManager) mContext.getSystemService(Activity.DOWNLOAD_SERVICE);
Uri uri = Uri.parse(fileUrl.trim()); // [파일 다운로드 주소 : 확장자명 포함되어야함]
DownloadManager.Request request = new DownloadManager.Request(uri); // [다운로드 매니저 객체 생성]
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); // [앱 상단에 다운로드 표시]
request.setTitle(fileName); // [다운로드 제목 표시]
request.setDescription("Download ... "); // [다운로드 중 표시되는 내용]
request.setNotificationVisibility(1); // [앱 상단에 다운로드 상태 표시]
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, fileName); // [다운로드 폴더 지정]
manager.enqueue(request); // [다운로드 수행]
// [로그 출력 실시]
Log.i("---","---");
Log.w("//===========//","================================================");
Log.i("","\n"+"[C_Util >> appDownloadFile() :: 파일 다운로드 수행 실시]");
Log.i("","\n"+"--------------------------------");
Log.i("","\n"+"[fileUrl :: "+String.valueOf(fileUrl)+"]");
Log.i("","\n"+"--------------------------------");
Log.i("","\n"+"[fileName :: "+String.valueOf(fileName)+"]");
Log.i("","\n"+"--------------------------------");
Log.i("","\n"+"[downloadPath :: "+String.valueOf("DIRECTORY_DOWNLOADS")+"]");
Log.w("//===========//","================================================");
Log.i("---","---");
// [토스트 알림 실시]
Toast.makeText(mContext, "파일 다운로드를 수행합니다.", Toast.LENGTH_SHORT).show();
}
else { // [널 인 경우 >> 실패 토스트]
// [로그 출력 실시]
Log.i("---","---");
Log.e("//===========//","================================================");
Log.i("","\n"+"[C_Util >> appDownloadFile() :: 파일 다운로드 수행 에러]");
Log.i("","\n"+"--------------------------------");
Log.i("","\n"+"[error :: "+String.valueOf("file extension is null")+"]");
Log.e("//===========//","================================================");
Log.i("---","---");
// [토스트 알림 실시]
Toast.makeText(mContext, "파일 확장자 명을 다시 확인해주세요.", Toast.LENGTH_SHORT).show();
}
}
else {
Log.i("---","---");
Log.e("//===========//","================================================");
Log.i("","\n"+"[C_Util >> appDownloadFile() :: 파일 다운로드 수행 실시]");
Log.i("","\n"+"--------------------------------");
Log.i("","\n"+"[error :: "+"PERMISSION WRITE_EXTERNAL_STORAGE NOT GRANTED"+"]");
Log.i("","\n"+"--------------------------------");
Log.i("","\n"+"[WRITE_EXTERNAL_STORAGE :: "+String.valueOf(ContextCompat.checkSelfPermission(mContext, Manifest.permission.WRITE_EXTERNAL_STORAGE))+"]");
Log.e("//===========//","================================================");
Log.i("---","---");
// [토스트 알림 실시]
Toast.makeText(mContext, "외부 저장소 접근 권한을 허용해주세요.", Toast.LENGTH_SHORT).show();
}
}
else { // [파일 확장자 명이 널 인 경우]
Log.i("---","---");
Log.e("//===========//","================================================");
Log.i("","\n"+"[C_Util >> appDownloadFile() :: 파일 다운로드 수행 실시]");
Log.i("","\n"+"--------------------------------");
Log.i("","\n"+"[error :: "+"file url is null"+"]");
Log.i("","\n"+"--------------------------------");
Log.i("","\n"+"[fileUrl :: "+String.valueOf(fileUrl)+"]");
Log.e("//===========//","================================================");
Log.i("---","---");
}
}
catch (Exception e){
e.printStackTrace();
}
}
// TODO [LPAD 왼쪽 기준 데이터 채우기 수행 실시]
public static String LPAD(String stringData, int lengthData, String charData){
/**
* // -----------------------------------------
* [LPAD 메소드 설명]
* // -----------------------------------------
* 1. 왼쪽 기준 데이터 채우기 수행 실시
* // -----------------------------------------
* 2. 호출 방식 : C_Util.LPAD("투케이", 10, "@");
* // -----------------------------------------
* 3. 리턴 데이터 : @@@@@@@투케이
* // -----------------------------------------
* */
// [리턴 반환 변수 선언 실시]
String returnData = "";
// [인풋 데이터 조건 체크 수행 실시 : 원본 문자열 길이 보다 인풋 값 길이가 더크고, char 문자가 1글자 인 경우]
try {
if (stringData != null
&& stringData.length() < lengthData
&& charData != null
&& charData.length() == 1){ // [조건 만족 함]
// [반복문을 수행 횟수]
int countValue = lengthData - stringData.length();
// [반복문 수행 실시]
for (int i=0; i<countValue; i++){
// [문자 추가]
returnData = returnData + charData;
}
// [원본 추가]
returnData = returnData + stringData;
}
else { // [조건 만족 안함]
// [리턴 결과 반환 수행 실시]
returnData = stringData;
}
}
catch (Exception e){
e.printStackTrace();
}
// [로그 출력 실시]
///*
Log.i("---","---");
Log.d("//===========//","================================================");
Log.i("","\n"+"[C_Util >> LPAD() :: 왼쪽 기준 데이터 채우기 수행 실시]");
Log.i("","\n"+"--------------------------------");
Log.i("","\n"+"[input [string] :: "+String.valueOf(stringData)+"]");
Log.i("","\n"+"--------------------------------");
Log.i("","\n"+"[input [length] :: "+String.valueOf(lengthData)+"]");
Log.i("","\n"+"--------------------------------");
Log.i("","\n"+"[input [char] :: "+String.valueOf(charData)+"]");
Log.i("","\n"+"--------------------------------");
Log.i("","\n"+"[return [string] :: "+String.valueOf(returnData)+"]");
Log.i("","\n"+"--------------------------------");
Log.i("","\n"+"[return [length] :: "+String.valueOf(returnData.length())+"]");
Log.d("//===========//","================================================");
Log.i("---","---");
// */
// [리턴 결과 반환 실시]
return returnData;
}
// TODO [RPAD 오른쪽 기준 데이터 채우기 수행 실시]
public static String RPAD(String stringData, int lengthData, String charData){
/**
* // -----------------------------------------
* [RPAD 메소드 설명]
* // -----------------------------------------
* 1. 오른쪽 기준 데이터 채우기 수행 실시
* // -----------------------------------------
* 2. 호출 방식 : C_Util.RPAD("투케이", 10, "@");
* // -----------------------------------------
* 3. 리턴 데이터 : 투케이@@@@@@@
* // -----------------------------------------
* */
// [리턴 반환 변수 선언 실시]
String returnData = "";
// [인풋 데이터 조건 체크 수행 실시 : 원본 문자열 길이 보다 인풋 값 길이가 더크고, char 문자가 1글자 인 경우]
try {
if (stringData != null
&& stringData.length() < lengthData
&& charData != null
&& charData.length() == 1){ // [조건 만족 함]
// [반복문을 수행 횟수]
int countValue = lengthData - stringData.length();
// [원본 추가]
returnData = returnData + stringData;
// [반복문 수행 실시]
for (int i=0; i<countValue; i++){
// [문자 추가]
returnData = returnData + charData;
}
}
else { // [조건 만족 안함]
// [리턴 결과 반환 수행 실시]
returnData = stringData;
}
}
catch (Exception e){
e.printStackTrace();
}
// [로그 출력 실시]
///*
Log.i("---","---");
Log.d("//===========//","================================================");
Log.i("","\n"+"[C_Util >> RPAD() :: 오른쪽 기준 데이터 채우기 수행 실시]");
Log.i("","\n"+"--------------------------------");
Log.i("","\n"+"[input [string] :: "+String.valueOf(stringData)+"]");
Log.i("","\n"+"--------------------------------");
Log.i("","\n"+"[input [length] :: "+String.valueOf(lengthData)+"]");
Log.i("","\n"+"--------------------------------");
Log.i("","\n"+"[input [char] :: "+String.valueOf(charData)+"]");
Log.i("","\n"+"--------------------------------");
Log.i("","\n"+"[return [string] :: "+String.valueOf(returnData)+"]");
Log.i("","\n"+"--------------------------------");
Log.i("","\n"+"[return [length] :: "+String.valueOf(returnData.length())+"]");
Log.d("//===========//","================================================");
Log.i("---","---");
// */
// [리턴 결과 반환 실시]
return returnData;
}
// TODO [start 시작 기준 특정 문자 지우기 실시]
public static String startRemoveChar(String stringData, String charData){
/**
* // -----------------------------------------
* [startRemoveChar 메소드 설명]
* // -----------------------------------------
* 1. start 시작 기준 특정 문자 지우기 실시
* // -----------------------------------------
* 2. 호출 방식 : C_Util.startRemoveChar("@@@@@투케이@", "@");
* // -----------------------------------------
* 3. 리턴 데이터 : 투케이@
* // -----------------------------------------
* */
// [리턴 반환 변수 선언 실시]
String returnData = "";
// [인풋 데이터 조건 체크 수행 실시]
try {
if (stringData != null
&& stringData.length() > 0
&& stringData.trim().equals("") == false
&& stringData.trim().equals("null") == false
&& stringData.trim().equals("undefined") == false
&& charData != null
&& charData.length() > 0
&& charData.trim().equals("") == false
&& charData.trim().equals("null") == false
&& charData.trim().equals("undefined") == false){ // [조건 만족 함]
if (stringData.contains(charData) == true){ // [전체 문자열에서 특정 문자를 포함하는지 확인 실시]
// [플래그 값 지정 실시]
boolean stopFlag = false;
// [for 반복문을 돌면서 데이터 삽입 실시]
for (int i=0; i<stringData.length(); i++) {
if (String.valueOf(stringData.charAt(i)).equals(charData) == true){
// [문자열이 제거하려는 문자와 같은 경우]
if (stopFlag == false){
}
else {
// [리턴 변수에 삽입 실시]
returnData = returnData + String.valueOf(stringData.charAt(i));
}
}
else {
// [문자열이 제거하려는 문자와 다른 경우]
// [플래그 값 변경 실시]
stopFlag = true;
// [리턴 변수에 삽입 실시]
returnData = returnData + String.valueOf(stringData.charAt(i));
}
}
}
}
}
catch (Exception e){
e.printStackTrace();
}
// [로그 출력 실시]
///*
Log.i("---","---");
Log.d("//===========//","================================================");
Log.i("","\n"+"[C_Util >> startRemoveChar() :: start 시작 기준 특정 문자 지우기 실시]");
Log.i("","\n"+"--------------------------------");
Log.i("","\n"+"[input [string] :: "+String.valueOf(stringData)+"]");
Log.i("","\n"+"--------------------------------");
Log.i("","\n"+"[input [char] :: "+String.valueOf(charData)+"]");
Log.i("","\n"+"--------------------------------");
Log.i("","\n"+"[return [string] :: "+String.valueOf(returnData)+"]");
Log.d("//===========//","================================================");
Log.i("---","---");
// */
// [리턴 결과 반환 실시]
return returnData;
}
// TODO [end 종료 기준 특정 문자 지우기 실시]
public static String endRemoveChar(String stringData, String charData){
/**
* // -----------------------------------------
* [endRemoveChar 메소드 설명]
* // -----------------------------------------
* 1. start 시작 기준 특정 문자 지우기 실시
* // -----------------------------------------
* 2. 호출 방식 : C_Util.endRemoveChar("@투케이@@@@@", "@");
* // -----------------------------------------
* 3. 리턴 데이터 : @투케이
* // -----------------------------------------
* */
// [리턴 반환 변수 선언 실시]
String returnData = "";
// [인풋 데이터 조건 체크 수행 실시]
try {
if (stringData != null
&& stringData.length() > 0
&& stringData.trim().equals("") == false
&& stringData.trim().equals("null") == false
&& stringData.trim().equals("undefined") == false
&& charData != null
&& charData.length() > 0
&& charData.trim().equals("") == false
&& charData.trim().equals("null") == false
&& charData.trim().equals("undefined") == false){ // [조건 만족 함]
if (stringData.contains(charData) == true){ // [전체 문자열에서 특정 문자를 포함하는지 확인 실시]
// [플래그 값 지정 실시]
boolean stopFlag = false;
// [for 반복문을 돌면서 데이터 삽입 실시]
for (int i=stringData.length()-1; i>=0; i--) {
if (String.valueOf(stringData.charAt(i)).equals(charData) == true){
// [문자열이 제거하려는 문자와 같은 경우]
if (stopFlag == false){
}
else {
// [리턴 변수에 삽입 실시]
returnData = String.valueOf(stringData.charAt(i)) + returnData;
}
}
else {
// [문자열이 제거하려는 문자와 다른 경우]
// [플래그 값 변경 실시]
stopFlag = true;
// [리턴 변수에 삽입 실시]
returnData = String.valueOf(stringData.charAt(i)) + returnData;
}
}
}
}
}
catch (Exception e){
e.printStackTrace();
}
// [로그 출력 실시]
///*
Log.i("---","---");
Log.d("//===========//","================================================");
Log.i("","\n"+"[C_Util >> endRemoveChar() :: end 종료 기준 특정 문자 지우기 실시]");
Log.i("","\n"+"--------------------------------");
Log.i("","\n"+"[input [string] :: "+String.valueOf(stringData)+"]");
Log.i("","\n"+"--------------------------------");
Log.i("","\n"+"[input [char] :: "+String.valueOf(charData)+"]");
Log.i("","\n"+"--------------------------------");
Log.i("","\n"+"[return [string] :: "+String.valueOf(returnData)+"]");
Log.d("//===========//","================================================");
Log.i("---","---");
// */
// [리턴 결과 반환 실시]
return returnData;
}
// TODO [디바이스 소프트웨어 OS 버전 확인]
public static String getDeviceOsVersion(){
/**
* // -----------------------------------------
* [getDeviceOsVersion 메소드 설명]
* // -----------------------------------------
* 1. 디바이스 소프트웨어 OS 버전 확인
* // -----------------------------------------
* 2. 호출 방식 :
* C_Util.getDeviceOsVersion();
* // -----------------------------------------
* 3. 리턴 데이터 : 휴대폰 설정 디바이스 소프트웨어 OS 버전 리턴
* // -----------------------------------------
* */
// [리턴 데이터 변수 선언 실시]
String returnData = "";
// [로직 처리 수행 실시]
try {
// [Build VERSION 사용해 정보 확인 실시]
returnData = String.valueOf(Build.VERSION.RELEASE);
}
catch (Exception e){
e.printStackTrace();
}
// [로그 출력 실시]
///*
Log.i("---","---");
Log.d("//===========//","================================================");
Log.i("","\n"+"[C_Util >> getDeviceOsVersion() :: 디바이스 소프트웨어 OS 버전 확인 실시]");
Log.i("","\n"+"--------------------------------");
Log.i("","\n"+"[result :: "+String.valueOf(returnData)+"]");
Log.d("//===========//","================================================");
Log.i("---","---");
// */
// [리턴 데이터 반환 실시]
return returnData;
}
// TODO [String 문자열 데이터가 URL 형식으로 파싱 가능 한지 체크 실시]
public static boolean stringIsUrlParsing(String url){
/**
* // -----------------------------------------
* [stringIsUrlParsing 메소드 설명]
* // -----------------------------------------
* 1. String 문자열 데이터가 URL 형식으로 파싱 가능 한지 체크 실시
* // -----------------------------------------
* 2. 호출 방식 :
*
* C_Util.stringIsUrlParsing("https://www.naver.com");
* C_Util.stringIsUrlParsing("test.co.kr");
* // -----------------------------------------
* 3. 리턴 데이터 : true / false
* // -----------------------------------------
* */
// [리턴 데이터 변수 선언 실시]
boolean returnData = false;
// [인풋 데이터 널 체크 수행 실시]
if (url != null && url.length()>0 && url.equals("") == false
&& url.trim().equals("null") == false && url.trim().equals("undefined") == false
&& url.startsWith("http") == true){
try {
// [URL 형식으로 파싱 가능 한지 확인 실시]
URL checkUrl = new URL(url);
// [리턴 변수 삽입 실시]
returnData = true;
}
catch (Exception e){
//e.printStackTrace();
}
}
// [로그 출력 실시]
///*
Log.i("---","---");
Log.d("//===========//","================================================");
Log.i("","\n"+"[C_Util >> stringIsUrlParsing() :: String 문자열 데이터가 URL 형식으로 파싱 가능 한지 체크 실시]");
Log.i("","\n"+"--------------------------------");
Log.i("","\n"+"[input :: "+String.valueOf(url)+"]");
Log.i("","\n"+"--------------------------------");
Log.i("","\n"+"[result :: "+String.valueOf(returnData)+"]");
Log.d("//===========//","================================================");
Log.i("---","---");
// */
// [리턴 데이터 반환 실시]
return returnData;
}
// TODO [현재 날짜 및 시간 타임 스탬프 확인]
public static String getTimeStamp(){
/**
* // -----------------------------------------
* [getTimeStamp 메소드 설명]
* // -----------------------------------------
* 1. 현재 날짜 및 시간 데이터를 13 자리 타임 스탬프 값으로 반환
* // -----------------------------------------
* 2. 호출 방식 : C_Util.getTimeStamp();
* // -----------------------------------------
* 3. 리턴 데이터 : 1663031163703
* // -----------------------------------------
* */
// [리턴 반환 변수 선언 실시]
String returnData = "";
String dateNow = "";
// [인풋 데이터 조건 체크 수행 실시]
try {
// [타임 스탬프 객체 생성]
Timestamp timestamp = new Timestamp(System.currentTimeMillis());
returnData = String.valueOf(timestamp.getTime()); // 타임 스탬프 밀리 세컨드
// [현재 날짜 및 시간 검증]
Date date = new Date(Long.parseLong(returnData));
// [타임 스탬프 값을 포맷 Date 형식으로 변경]
SimpleDateFormat sdf = new SimpleDateFormat ("yyyyMMddkkmmss");
dateNow = String.valueOf(sdf.format(date));
}
catch (Exception e){
e.printStackTrace();
}
// [로그 출력 실시]
///*
Log.i("---","---");
Log.d("//===========//","================================================");
Log.i("","\n"+"[C_Util >> getTimeStamp() :: 현재 날짜 및 시간 타임 스탬프 확인]");
Log.i("","\n"+"--------------------------------");
Log.i("","\n"+"[date :: "+String.valueOf(dateNow)+"]");
Log.i("","\n"+"--------------------------------");
Log.i("","\n"+"[return [length] :: "+String.valueOf(returnData.length())+"]");
Log.i("","\n"+"--------------------------------");
Log.i("","\n"+"[return [timeStamp] :: "+String.valueOf(returnData)+"]");
Log.d("//===========//","================================================");
Log.i("---","---");
// */
// [리턴 결과 반환 실시]
return returnData;
}
// TODO [앱 캐시 초기화 수행 실시]
public static void clearAppCache(Context mContext){
/**
* // -----------------------------------------
* [clearAppCache 메소드 설명]
* // -----------------------------------------
* 1. 애플리케이션 앱 캐시 삭제 수행 메소드
* // -----------------------------------------
* 2. 호출 방식 : C_Util.clearAppCache(A_Main.this);
* // -----------------------------------------
* 3. 확인 방법 : 애플리케이션 설정 >> 캐시 용량 확인
* // -----------------------------------------
* */
try {
File cache = mContext.getCacheDir();
if(cache != null && cache.exists() == true){
Log.i("---","---");
Log.w("//===========//","================================================");
Log.i("","\n"+"[C_Util >> clearAppCache() :: 앱 캐시 폴더 존재 확인 및 삭제 수행]");
Log.i("","\n"+"[url :: "+String.valueOf(cache.toURI())+"]");
Log.i("","\n"+"[getName :: "+String.valueOf(cache.getName())+"]");
Log.i("","\n"+"[cacheList :: "+String.valueOf(Arrays.toString(cache.list()))+"]");
Log.w("//===========//","================================================");
Log.i("---","---");
try {
// [앱 캐시 삭제 수행 실시]
cache.delete();
deleteCache(cache);
}
catch (Exception ex){
ex.printStackTrace();
}
}
else {
Log.i("---","---");
Log.e("//===========//","================================================");
Log.i("","\n"+"[C_Util >> clearAppCache() :: 앱 캐시 폴더 존재 하지 않음]");
Log.e("//===========//","================================================");
Log.i("---","---");
}
}
catch (Exception e){
e.printStackTrace();
}
}
// TODO [앱 캐시 및 데이터 초기화 수행 실시]
public static void clearAppData(Context mContext){
/**
* // -----------------------------------------
* [clearAppData 메소드 설명]
* // -----------------------------------------
* 1. 애플리케이션 앱 캐시 및 데이터 삭제 수행 메소드
* // -----------------------------------------
* 2. 호출 방식 : C_Util.clearAppData(A_Main.this);
* // -----------------------------------------
* 3. 확인 방법 : 애플리케이션 설정 >> 데이터, 캐시 용량 확인
* // -----------------------------------------
* */
try {
File cache = mContext.getCacheDir();
File appDir = new File(cache.getParent());
if(appDir != null && appDir.exists() == true){
Log.i("---","---");
Log.w("//===========//","================================================");
Log.i("","\n"+"[C_Util >> clearAppData() :: 앱 캐시 및 데이터 폴더 존재 확인 및 삭제 수행]");
Log.i("","\n"+"[url :: "+String.valueOf(appDir.toURI())+"]");
Log.i("","\n"+"[getName :: "+String.valueOf(appDir.getName())+"]");
Log.i("","\n"+"[cacheList :: "+String.valueOf(Arrays.toString(appDir.list()))+"]");
Log.w("//===========//","================================================");
Log.i("---","---");
try {
// [앱 캐시 및 데이터 삭제 수행 실시]
appDir.delete();
deleteCache(appDir);
}
catch (Exception ex){
ex.printStackTrace();
}
}
else {
Log.i("---","---");
Log.e("//===========//","================================================");
Log.i("","\n"+"[C_Util >> clearAppData() :: 앱 캐시 및 데이터 폴더 존재 하지 않음]");
Log.e("//===========//","================================================");
Log.i("---","---");
}
}
catch (Exception e){
e.printStackTrace();
}
}
// TODO [앱 캐시 초기화 로직 메소드]
public static boolean deleteCache(File dir){
// [파일이 Null 인지 Null 이 아니라면 폴더 인지 체크 실시]
if(dir != null && dir.isDirectory()){
// [Null 도 아니고 폴더도 아니라면 폴더안 파일 리스트를 호출]
String[] children = dir.list();
// [파일 리스트를 반복문으로 호출]
for(String child : children){
try {
// [파일 리스트중 폴더가 존재할 수 있기 때문에 재귀호출]
boolean isSuccess = deleteCache(new File(dir, child));
if(!isSuccess){
return false;
}
}
catch (Exception e){
e.printStackTrace();
return false;
}
}
}
return dir.delete();
}
// TODO [실제 디바이스 기기 모델 이름 명칭 확인]
public static String getDeviceModelName() {
/**
* // -----------------------------------------
* [getDeviceModelName 메소드 설명]
* // -----------------------------------------
* 1. 실제 디바이스 기기 모델 이름 명칭 확인
* // -----------------------------------------
* 2. 호출 방법 : C_Util.getDeviceModelName();
* // -----------------------------------------
* 3. 리턴 데이터 :
*
* [samsung] SM-A500S
* [google] sdk_gphone_arm64
* // -----------------------------------------
* */
// [리턴 데이터 선언 실시]
String returnData = "";
// [로직 처리 실시]
try {
String brand = "["+String.valueOf(Build.BRAND)+"]";
String model = String.valueOf(Build.MODEL);
// [리턴 변수에 결합]
returnData = brand.replaceAll(" ", "") + " " + model.replaceAll(" ", "");
} catch (Exception e) {
e.printStackTrace();
// [리턴 변수에 결합]
returnData = "[Error] Exception";
}
// [로그 출력 실시]
Log.i("---","---");
Log.d("//===========//","================================================");
Log.i("","\n"+"[C_Util >> getDeviceModelName() :: 디바이스 실제 기기 모델 명칭 확인]");
Log.i("","\n"+"-----------------------------------------");
Log.i("","\n"+"[return :: "+String.valueOf(returnData)+"]");
Log.d("//===========//","================================================");
Log.i("---","---");
// [리턴 결과 반환]
return returnData;
}
} // TODO [클래스 종료]
반응형
'투케이2K 유틸파일' 카테고리의 다른 글
Comments