1. Java / Говнокод #12059

    +94

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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
    String s="a, b, c, d,,,";
    		
    		String[] spl=s.split ( "," );
    		o.println(spl.length);
    		for (String s1: spl)
    			o.print(s1+";");
    //4
    //a; b; c; d;
    		StringTokenizer st=new StringTokenizer(s);
    		o.println("\n"+st.countTokens ());
    		while (st.hasMoreElements ()){
    			o.print(
    				st.nextToken ()+";"
    			);
    		}
    //4
    //a,;b,;c,;d,,,;
    		st=new StringTokenizer(s,",");
    		o.println("\n"+st.countTokens ());
    		while (st.hasMoreElements ()){
    			o.print(
    				st.nextToken ()+";"
    			);
    		}
    //4
    //a; b; c; d;

    http://ideone.com/zh0paB
    Очередной сюжет из серии JavaGovno.

    3.14159265, 05 Ноября 2012

    Комментарии (9)
  2. Java / Говнокод #12053

    +68

    1. 1
    2. 2
    3. 3
    public ConcurrentHashMap(int initialCapacity, float loadFactor, int concurrencyLevel) {
         if (initialCapacity < 0)
           throw new IllegalArgumentException();

    - unsigned?
    - ЖАБАПРОБЛЕМЫ.

    А ещё это не портируется на 64хбитные платформы с 32хбитным intом.

    LispGovno, 04 Ноября 2012

    Комментарии (54)
  3. Java / Говнокод #12032

    +69

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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
    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append("\nAVPCODE: "+code+'<'+vendorId+'>');
        return sb.toString();
    }
    
    public String getCodeAsStringWithVendorIdAlways(){
        StringBuilder sb = new  StringBuilder();
    
        sb.append(code);
        sb.append('<');
        sb.append(vendorId);
        sb.append('>');
    
        return sb.toString();
    }
    
    public String getCodeAsStringWithVendorIdOnlyForRealVendorIds(){
        StringBuilder sb = new  StringBuilder();
    
        sb.append(code);
    
        if(vendorId > 0){
            sb.append('<');
            sb.append(vendorId);
            sb.append('>');
        }
    
        return sb.toString();
    }

    конвертим Diameter's AVP код/вендор ид в строку.

    "\n" как всегда порадовал.

    и само собой разумеется что только последний метод - с именем в 47 символов - работает именно так как все и ожидают и как всем нужно (соответствует синтаксису конфигов).

    Dummy00001, 30 Октября 2012

    Комментарии (8)
  4. Java / Говнокод #12027

    +70

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    protected SocketChannel getSockById(int id)
    {
              Iterator<SocketChannel> i = clientSock.iterator();
              while(i.hasNext())
              {
              	SocketChannel s = i.next();
              	if(s.hashCode() == id)
               		return s;
         
              }
              return null;
    }

    Инетесно, о чём думал автор в момент создания этого шедевра

    roman-kashitsyn, 30 Октября 2012

    Комментарии (20)
  5. Java / Говнокод #12026

    +72

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    if("all".equalsIgnoreCase(lvl)) {
                setLevel(SimpleLog.LOG_LEVEL_ALL);
            } else if("trace".equalsIgnoreCase(lvl)) {
                setLevel(SimpleLog.LOG_LEVEL_TRACE);
            } else if("debug".equalsIgnoreCase(lvl)) {
                setLevel(SimpleLog.LOG_LEVEL_DEBUG);
            } else if("info".equalsIgnoreCase(lvl)) {
                setLevel(SimpleLog.LOG_LEVEL_INFO);
            } else if("warn".equalsIgnoreCase(lvl)) {
                setLevel(SimpleLog.LOG_LEVEL_WARN);
            } else if("error".equalsIgnoreCase(lvl)) {
                setLevel(SimpleLog.LOG_LEVEL_ERROR);
            } else if("fatal".equalsIgnoreCase(lvl)) {
                setLevel(SimpleLog.LOG_LEVEL_FATAL);
            } else if("off".equalsIgnoreCase(lvl)) {
                setLevel(SimpleLog.LOG_LEVEL_OFF);
            }

    Внутренности конструктора org.apache.commons.logging.impl.SimpleLo g

    POPSuL, 30 Октября 2012

    Комментарии (21)
  6. Java / Говнокод #12010

    +95

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    import java.io.PrintStream;
    import java.util.concurrent.atomic.AtomicBoolean;
    
    public final class ShredingerCat
    extends AtomicBoolean
    {
    	static final PrintStream o=System.out;
    	static final long initMsec=System.currentTimeMillis ();
    	
    	public static final ShredingerCat	INSTANCE = new ShredingerCat();
    	private ShredingerCat ()
    	{
    		set ( false );
    		o.println ( "Construct SingleBool" );
    	}
    	public final
    	void criticalSection(){
    		synchronized (this) {
    			pr ( "Enter critical section" );
    			ShredingerCat.sl ( 5 );
    			
    			pr ( "Cat is " +(
    					get() 
    					? "dead"
    					: "alive"
    				)
    			);
    			sl(100);
    			pr ( "Exit critical section" );
    		}
    		
    	}
    	// ===================== HELPER STUFF ========================
    
    	static void pr(String s){
    		o.println ( s+(
    			System.currentTimeMillis ()- initMsec
    		));
    	}
    	static void sl(long l){
    		try {
    			Thread.sleep ( l );
    		}catch (InterruptedException e) {
    		}
    	}
    	
    
    
    }

    Обсуждение #11989 безопасных публикаций, конструкторов и синглтонов вдохновило меня на создание этого примера.
    Суть: есть кот-синглтон. Он как вы видите защищен со всех сторон finalами, приправленое к тому же Atomicом.
    Задание на серебряную медаль - сделать так чтобы 2 последовательных вызова toString() вывели Dead и Alive. Объект не должен меняться.
    Задание на золотую медаль: необходимо получить примерно такой вывод:
    Enter critical section0
    Enter critical section0
    Cat is alive16
    Cat is dead16
    Exit critical section110
    Exit critical section110

    За использование рефлексии и прочих unsafe - немедленная дисквалификация и бан модератором.
    Решение будет чуть позже. Отдельным постом.

    3.14159265, 26 Октября 2012

    Комментарии (24)
  7. Java / Говнокод #11985

    +74

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    public void aMethod() {
        try {
            int t = 0;
            t = t / t;
        } catch (Exception e) {
            System.out.println("aMethod");
            for (StackTraceElement element : e.getStackTrace()) {
                System.out.println("aMethod" + element.getClassName() + " " + element.getMethodName() + " " + element.getLineNumber() );
            }
        }
    ...//дополнительная "логика"
    }

    оригинальный способ узнать кто же вызвал aMethod

    Cat4eg, 24 Октября 2012

    Комментарии (17)
  8. Java / Говнокод #11977

    +91

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    public static 
    	String readFile(String file) {
    		return Read.file(  Reflection.getCallerClass(2), file,"\n");
    	}
    	public static 
    	String readFile(Class c, String file, final String lineBreaker) {
    		return Read.stream(c.getResourceAsStream(file),lineBreaker);
    	}

    Я уже как-то раз наступил на эту хрень.
    Но ничё - сегодня снова вот решил написать - удобно ведь.

    3.14159265, 22 Октября 2012

    Комментарии (22)
  9. Java / Говнокод #11973

    +73

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    public String getText()
    {
            // don't ask me what these charset tricks mean :)
            String str = null;
            try
            {
                str = new String(doc.getText(0, doc.getLength()).getBytes("Cp1252"), "Cp1251");
            }
            catch(Exception e)
            {
                // Leave str as null
            }
            
            return str;
    }

    ...

    roman-kashitsyn, 22 Октября 2012

    Комментарии (27)
  10. Java / Говнокод #11926

    +93

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    package java.util.logging;
    public class XMLFormatter extends Formatter 
    {
        // Append a two digit number.
        private void a2(StringBuffer sb, int x) {
    	if (x < 10) {
    	    sb.append('0');
    	}
    	sb.append(x);
        }
        // Append the time and date in ISO 8601 format
        private void appendISO8601(StringBuffer sb, long millis) {
    	Date date = new Date(millis);
    	sb.append(date.getYear() + 1900);
    	sb.append('-');
    	a2(sb, date.getMonth() + 1);
    	sb.append('-');
    	a2(sb, date.getDate());
    	sb.append('T');
    	a2(sb, date.getHours());
    	sb.append(':');
    	a2(sb, date.getMinutes());
    	sb.append(':');
    	a2(sb, date.getSeconds());
        }
        private void escape(StringBuffer sb, String text) {
    	if (text == null) {
    	    text = "<null>";
    	}
    	for (int i = 0; i < text.length(); i++) {
    	    char ch = text.charAt(i);
    	    if (ch == '<') {
    		sb.append("<");
    	    } else if (ch == '>') {
    		sb.append(">");
    	    } else if (ch == '&') {
    		sb.append("&");
    	    } else {
    		sb.append(ch);
    	    }
    	}
        }
        public String format(LogRecord record) {
    	StringBuffer sb = new StringBuffer(500);
    	sb.append("<record>\n");
    
    	sb.append("  <date>");
    	appendISO8601(sb, record.getMillis());
    	sb.append("</date>\n");
    
    	sb.append("  <millis>");
    	sb.append(record.getMillis());
    	sb.append("</millis>\n");
    
    	sb.append("  <sequence>");
    	sb.append(record.getSequenceNumber());
    	sb.append("</sequence>\n");
    
    	String name = record.getLoggerName();
    	if (name != null) {
    	    sb.append("  <logger>");
    	    escape(sb, name);
    	    sb.append("</logger>\n");
    	}
    
    	sb.append("  <level>"); 
    	escape(sb, record.getLevel().toString());
    	sb.append("</level>\n");
    
    	if (record.getSourceClassName() != null) {
    	    sb.append("  <class>");
    	    escape(sb, record.getSourceClassName());
    	    sb.append("</class>\n");
    	}
    
    	if (record.getSourceMethodName() != null) {
    	    sb.append("  <method>");
    	    escape(sb, record.getSourceMethodName());
    	    sb.append("</method>\n");
    	}
    
    	sb.append("  <thread>");
    	sb.append(record.getThreadID());
    	sb.append("</thread>\n");
     ....

    Я конечно всё понимаю, неоднократно были ситуации когда для скорости сам собирал xml руками.
    Но тут и вовсе такое ощущение будто школьник писал.
    http://kickjava.com/src/java/util/logging/XMLFormatter.java.htm

    3.14159265, 15 Октября 2012

    Комментарии (6)