Решение на самом деле намного проще.
l = ["not end", "", "", "", "x", "y", "don't move"]
Определите конец зоны «не двигаться»:
MOVE = 6
«Выжать» пустые строки:
part1 = [x for x in l[:MOVE] if x]
Переместить » «выдавил» пустые строки до конца:
part2 = (MOVE - len(part1)) * [""]
Объедините кусочки:
part1 + part2 + l[MOVE:]
#['not end', 'x', 'y', '', '', '', "don't move"]
В качестве альтернативы вы можете отсортировать первую часть списка по свойство быть пустой строкой:
sorted(l[:MOVE], key=lambda x: x=="") + l[MOVE:]
#['not end', 'x', 'y', '', '', '', "don't move"]
Это касается версий Java 7 и ранее.
Заключить хороший ответ в кавычки на тот же вопрос:
Если Вы хотите это назад как строку позже, можно назвать getPath (). Действительно, если Вы действительно хотели подражать Пути. Объединение, Вы могли просто записать что-то как:
public static String combine (String path1, String path2) {
File file1 = new File(path1);
File file2 = new File(file1, path2);
return file2.getPath();
}
Это - запуск, я не думаю, что он работает точно, как Вы предназначаете, но он, по крайней мере, приводит к последовательному результату.
import java.io.File;
public class Main
{
public static void main(final String[] argv)
throws Exception
{
System.out.println(pathJoin());
System.out.println(pathJoin(""));
System.out.println(pathJoin("a"));
System.out.println(pathJoin("a", "b"));
System.out.println(pathJoin("a", "b", "c"));
System.out.println(pathJoin("a", "b", "", "def"));
}
public static String pathJoin(final String ... pathElements)
{
final String path;
if(pathElements == null || pathElements.length == 0)
{
path = File.separator;
}
else
{
final StringBuilder builder;
builder = new StringBuilder();
for(final String pathElement : pathElements)
{
final String sanitizedPathElement;
// the "\\" is for Windows... you will need to come up with the
// appropriate regex for this to be portable
sanitizedPathElement = pathElement.replaceAll("\\" + File.separator, "");
if(sanitizedPathElement.length() > 0)
{
builder.append(sanitizedPathElement);
builder.append(File.separator);
}
}
path = builder.toString();
}
return (path);
}
}
Один путь состоит в том, чтобы получить системные свойства, которые дают Вам разделитель пути для операционной системы, это учебное руководство объясняет как. Можно затем использовать стандартное строковое соединение с помощью file.separator
.
Можно просто сделать
String joinedPath = new File(path1, path2).toString();