На вопрос:
Будет ли порожденный длинный поток блокировать wsgi от выполнения чего-либо еще для другого запроса?!
ответ - нет.
Вы все еще должны быть осторожны при создании фоновых потоков из запроса, хотя в случае, если вы просто создаете их огромное количество и забиваете весь процесс. Вам действительно нужна система организации задач, даже если вы делаете что-то в процессе.
В отношении выполнения форка или exec из веб-процесса, особенно из Apache, это, как правило, не очень хорошая идея, поскольку Apache может навязывать странные условия для среды созданного подпроцесса, которые могут технически мешать его работе.
Использование такой системы, как Celery, по-прежнему, вероятно, лучшее решение.
Поскольку объекты String
неизменяемы, переход к char []
через toCharArray
, замена символов, затем создание new Строка
из char []
через конструктор String (char [])
будет работать.
Следующий пример меняет местами первый и второй символы:
String originalString = "abcde";
char[] c = originalString.toCharArray();
// Replace with a "swap" function, if desired:
char temp = c[0];
c[0] = c[1];
c[1] = temp;
String swappedString = new String(c);
System.out.println(originalString);
System.out.println(swappedString);
Результат:
abcde
bacde
String.replaceAll () или replaceFirst ()
String s = "abcde".replaceAll("ab", "ba")
Ссылка на JavaDocs String API
На этот вопрос несколько раз ответили, но вот еще одно развлечение: -)
public class Tmp {
public static void main(String[] args) {
System.out.println(swapChars("abcde", 0, 1));
}
private static String swapChars(String str, int lIdx, int rIdx) {
StringBuilder sb = new StringBuilder(str);
char l = sb.charAt(lIdx), r = sb.charAt(rIdx);
sb.setCharAt(lIdx, r);
sb.setCharAt(rIdx, l);
return sb.toString();
}
}
] String.toCharArray () предоставит вам массив символов, представляющих эту строку.
Вы можете изменить это, не изменяя исходную строку (поменять местами любые требуемые символы), а затем создать новую строку, используя String (char []) .
Обратите внимание, что строки неизменяемы , поэтому вам нужно создать новый строковый объект.
«В» строку нельзя. Строки неизменны. Вы можете легко создать вторую строку с помощью:
String second = first.replaceFirst("(.)(.)", "$2$1");