Jawa / Говнокод #21574 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
int getPositionV1(String xml,int row,int col)
{
	int p=0;
        for (int lineNum=1;lineNum!=row;lineNum++)
	{
            p=xml.indexOf("\n\r",p)+eol.length();
            if (p==0) throw new RuntimeException ("XML do not contain row "+row);
        }
	return p+col;
}

int getPositionV2(String xml, int row, int col)
{
       int p0=0; int p1=xml.indexOf("\n",p0); int p2=xml.indexOf("\r",p0);
	int p3=(p1!=-1 && p2!=-1)?xml.indexOf("\r\n",p0):-1;
       for (int lineNum=1;lineNum!=row;lineNum++){
            if (p1!=-1 && p1<p0) p1=xml.indexOf("\n",p0); if (p2!=-1 && p2<p0) p2=xml.indexOf("\r",p0);
            if (p3!=-1 && p3<p0) p3=xml.indexOf("\r\n",p0);
            String eol=""; if (p1!=-1 && p2!=-1 && p3!=-1){
                if (p1<p2 && p1<p3) {eol="\n"; p0=p1;
		}else if (p2<p1 && p2<p3) {eol="\r"; p0=p2;
                }else if (p3<=p1 && p3<=p2) {eol="\r\n"; p0=p3;}
            }else if (p1!=-1 && p2!=-1){
                if (p1<p2) { eol="\n"; p0=p1;} else if (p2<p1) {eol="\r"; p0=p2;}
            }else if (p1!=-1 && p3!=-1){
                if (p1<p3) { eol="\n"; p0=p1;} else if (p3<=p1) {eol="\r\n"; p0=p3;}
            }else if (p2!=-1 && p3!=-1){
                if (p2 < p3) {eol="\r"; p0=p2;} else if (p3<=p2) {eol="\r\n"; p0=p3;}
            }else if (p1!=-1){eol="\n"; p0=p1;} else if (p2!=-1) {eol="\r"; p0=p2;
            }else if (p3!=-1){eol="\r\n"; p0=p3;}
            p0+=eol.length(); if (p0<=0) throw new RuntimeException("XML do not contain row "+row);
	}
    return p0+col-1;
}

Задача: дана строка (String), номер линии (строки) и столбца, где расположен символ; найти позицию этого символа в исходной строке.
Первое решение: getPositionV1

Но конец строки может быть любой, например \n,\r,\n\r, а ещё несколько подряд идущих строк.
Задача: исправить, чтобы работало со всеми видами и сочетаниями переносов строк, и работало быстро.
Второе решение: getPositionV2

А достаточно было использовать регулярное выражение: Pattern.compile("\\R").matcher(xml)

Запостил: AlCodel AlCodel, (Updated )

Комментарии (0) RSS

Добавить комментарий

Переведи на "PHP", guest!

    А не использовать ли нам bbcode?


    8