퇴근5분전


한글로 만들었더니 대박!!! 지저분함. ㅡ.,ㅡ;

----------------------------------------------------------- 훈스 팁게시판에 올린 글! 그대로..

소스를 보시고 대체 이건 뭥미? 하실텐데요...

오늘 질문게시판에 TextBox에 들어온 숫자의 갯수가 4개가 연속이면 제거해야된다는 글을

들어온 문자열중 4개가 중복되면 제거로 잘못보고 ㅡ.,ㅡ;;; 아래 클래스를 만들었었습니다.  난독증...

처음 클래스명과 변수명들은 모두 영문자로 늘 하던데로 대충.. 때려맞춰서 만들어놓고 보니

이걸 미친척 한글로 바꿔보고 싶은 생각이 문득 들어... 만들어보았습니다.

어떤가요?잘 지었는지? 검사와 검색이란 단어를 적용하려니.. 한글 사전없이는 힘든것 같네요.(아래도 불분명합니다. )

한글로 지어놓으니 대략 난감하네요. 하하하.

한글로 써놓으니 글씨 폰트도 영문자랑 안맞아서 그런지 많이 지저분하네요.

만들어본 목적

객체지향 <-- 을 되새기며 객체이름을 명시하고 기능을 명시하면서 코드를 문장으로 볼수 있다면... 이란 오랜

생각끝에 영어로 안되서 ㅡ.,ㅡ;; 한글로 도전해봤습니다.

중복문자처리객체.제거실행(  this.textBox1.Text  );

조금은 억지스럽지만 ^^ 미천한 실력으로 만들다보니 역시 미흡해보이는게 눈에 너무 띠네요.

이팁을 보시는 여러분들은 어떠신가요?

코드자체를 직독직해?  가능하신지요?? 객체를 얼마나 자연스러운 코드로 만드시는지요?

영어잘하시는분 넘 부러워요!!

사용법          

  만약 ) this.textBox1.Text = "aa abbccc c d e11 ffffc a aabbbbbb 22b 4444 66";

 데이타가 존재시... 아래와 같이 중복을 제거할수 있습니다.

숫자 2는 2개씩 체크합니다.

            using (중복문자제거클래스 중복문자처리객체 = new 중복문자제거클래스(2))
            {
                this.textBox1.Text = 중복문자처리객체.제거실행(this.textBox1.Text);
            }

    public class 중복문자제거클래스 : IDisposable
        {
            int 체크문자개수 = 0;

            int 현재위치 = 0;
            List<char> 검사문자저장소 = new List<char>();
            List<string> 중복문자목록 = new List<string>();

            public 중복문자제거클래스(int _체크문자갯수)
            {
                체크문자개수 = _체크문자갯수;
            }

            public string 제거실행(string 검사소스문자열)
            {
                string 제거된문자열 = "";
                현재위치 = 0;
                for (int loop = 0; loop < 검사소스문자열.Length; loop++)
                {                   
                    char? 검색대상문자 = 검색대상문자얻어내기(검사소스문자열);
                    if (검색대상문자 != null)
                    {                     
                        bool 검사여부 = 문자체크여부(검색대상문자.Value);

                        if (검사여부 == false)
                        {
                            중복문자체크(검사소스문자열, 검색대상문자.Value);
                        }
                        현재위치++;
                    }
                    if (현재위치 >= 검사소스문자열.Length - 1)
                    {
                        제거된문자열 = 문자변환(검사소스문자열).Replace("  ", " ");
                    }
                }
                return 제거된문자열;
            }

            private string 문자변환(string 검사소스문자열)
            {
                foreach (string 중복문자항목 in 중복문자목록)
                {
                    검사소스문자열 = 검사소스문자열.Replace(중복문자항목, "");
                }
                return 검사소스문자열;
            }

            private void 중복문자체크(string 검사소스문자열, char 검사대상문자)
            {
                try
                {
                    string 중복검사문자열 = new string(검사대상문자, 체크문자개수);
                    if (검사소스문자열.IndexOf(중복검사문자열, 현재위치) >= 0)
                    {
                        중복문자목록.Add(중복검사문자열);
                    }
                }
                catch{ }
            }

            private bool 문자체크여부(char 검색대상문자)
            {
                bool 체크여부 = false;
                if (검사문자저장소.Contains(검색대상문자))
                {
                    체크여부 = true;
                }
                else
                {
                    체크여부 = false;
                    검사문자저장소.Add(검색대상문자);
                }
                return 체크여부;
            }

            private char? 검색대상문자얻어내기(string 검사소스문자열)
            {
                char? 검색대상문자 = null;
                try
                {
                    검색대상문자 = 검사소스문자열[현재위치];
                }
                catch { }
                return 검색대상문자;
            }

            #region IDisposable 멤버

            public void Dispose()
            {
                검사문자저장소.Clear();
                중복문자목록.Clear();
                중복문자목록 = null;
                검사문자저장소 = null;
            }

            #endregion
        }