[Java lista] Fwd: Array join

istvan.ketler at lhsystems.com istvan.ketler at lhsystems.com
2009. Aug. 22., Szo, 22:26:17 CEST


Nem igazán értelek benneteket. Egy tömb elemeinek valamilyen delimiterrel való felsorolása stringként nem egy bonyolult feladat. Mellesleg az Arrays osztály toString metódusa visszaadja a tömb elemeinek "joinolt" stringjét. Igaz, hogy a delimiter vessző-szóköz, és az is igaz, hogy a lista szögletes zárójelbe van zárva, de a két szélét levágni és végrehajtani egy replace-t nem tűnik nagy melónak (gond legfeljebb akkor lehet, ha az egyes tömbelemek toString-je tartalmazza a vessző-szóköz kombinációt). Például:

	String delimiter = "|";
	int[] iarr = new int[12];
	String buff = Arrays.toString(iarr);
	String join = buff.substring(1, buff.length()-1).replaceAll(", ", delimiter);

A valaki által említett PHP-s problémát sem értem, hiszen a String osztálynak is van replace és split metódusa... A join meg nem tudom, miért kellett ahhoz a feladathoz, amit említett, de mint fentebb írtam, nem lett volna nagy meló megírni.

A lenti kóddal kapcsolatban pedig ha nem kell thread-safe, akkor a StringBuilder jobb a StringBuffernél (gyorsabb). A java a stringek összefűzésére belsőleg azt használja. Az új for ciklust is érdemes lehet használni (meg a paraméteres típust). Valahogy így:

	public static String join(Collection<? extends Object> s, String delimiter) {
		StringBuilder buffer = new StringBuilder();
		String currentDelimiter = null;
		for (Object o : s) {
			if (currentDelimiter != null) {
				buffer.append(currentDelimiter);
			} else {
				currentDelimiter = delimiter;
			}
			buffer.append(o);
		}
		return buffer.toString();
	}

Bocs, hogy beavatkoztam a programnyelvek fikázásába "in general" és a jáváéba "in particular".

Üdvözlettel,

Iván

István Ketler

Lufthansa Systems Hungaria Kft. 
Airline Management Solutions 
Schedule & Revenue Management 
Alkotás u. 53.
1123 Budapest
Hungary 

Tel: +36 1 887-2815 
Fax: +36 1 887-2977 

Room: MOM Park, Building A, Room 556 

e-mail: istvan.ketler at lhsystems.com 
Internet: www.LHsystems.hu



 
Sitz der Gesellschaft / Corporate Headquarters: Lufthansa Systems Hungaria Kft, Budapest, Fövarosi Birosag 01-09-463417
Geschaeftsfuehrung / Management Board: Monika Houck

-----Original Message-----

From: javalist-bounces at javagrund.hu [mailto:javalist-bounces at javagrund.hu] On Behalf Of Peter Verhas
Sent: Saturday, August 22, 2009 8:47 PM
To: javalist at javagrund.hu
Subject: Re: [Java lista] Fwd: Array join

Ezt éppen most követtem el (még nincs kidebuggolva)

    public static String join(Collection s, String delimiter) {
        StringBuffer buffer = new StringBuffer();
        Iterator iter = s.iterator();
        while (iter.hasNext()) {
            buffer.append(iter.next());
            if (iter.hasNext()) {
                buffer.append(delimiter);
            }
        }
        return buffer.toString();
    }

    private String absolute(String currentPath, String relativePath) {
        if (relativePath.startsWith("/")) {
            return relativePath;
        }
        String fullPath = currentPath + "/" + relativePath;
        fullPath = fullPath.replaceAll("//", "/");
        ArrayList<String> pathParts =
                new ArrayList(Arrays.asList(fullPath.split("/")));
        int i = 0;
        while (i < pathParts.size()) {
            if (pathParts.get(i).equals("..")) {
                pathParts.remove(i);
                if (i > 0) {
                    pathParts.remove(i - 1);
                }
            } else {
                i++;
            }
        }
        fullPath = join(pathParts, "/");
        return fullPath;
    }
_______________________________________________
Javalist mailing list
Javalist at javagrund.hu
http://javagrund.hu/mailman/listinfo/javalist


További információk a(z) Javalist levelezőlistáról