[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