Проблема в том, что PS почему-то разбирает -Dresourcepath=.
иначе, чем cmd. Что работает
java -cp '.;.\common.jar' -Dcontext=atest1 "-Dresourcepath=." DW_Install
Не имеет значения, в каком направлении идет слэш, и не имеет значения, какие кавычки используются ('
или "
). Однако путь класса должен быть экранирован какими-то кавычками. Хороший тест, чтобы понять, что получает переводчик PS, - это повторить его. Следующее:
echo java -cp '.;.\common.jar' -Dcontext=atest1 -Dresourcepath=. DW_Install
выводит следующий результат:
java
-cp
.;.\common.jar
-Dcontext=etaste1
-Dresourcepath=
.
DW_Install
(Обратите внимание, что путь ресурса и значение пути к ресурсу не находятся в одной строке.) Если вывод в
echo java -cp '.;.\common.jar' -Dcontext=atest1 '-Dresourcepath=.' DW_Install
дает следующий результат:
java
-cp
.;.\common.jar
-Dcontext=etaste1
-Dresourcepath=.
DW_Install
Это намного больше по душе.
Хотя я этого не желаю никому из вас, я надеюсь что этот пост помогает тем из вас, которые должны развертывать java-проекты на компьютерах Windows (хотя они никогда не будут работать на какой-либо другой платформе).
Самый простой будет использовать регулярное выражение с флагом G
для замены всех экземпляров:
str.replace(/foo/g, "bar")
Это заменит все вхождения foo
с Бар
в строке str
. Если у вас просто есть строка, вы можете преобразовать его в объект Regexp, как это:
var pattern = "foobar",
re = new RegExp(pattern, "g");
Я просто кодировал сравнительный тест и протестировал первые 3 ответа. Кажется этим для коротких строк (< 500 символов)
третий самый проголосовавший ответ быстрее, чем второй самый проголосовавший.
Для длинных строк (добавляют ".repeat (300)" к тестовой строке) быстрее ответ 1 сопровождаемый вторым и третьим.
Примечание:
Вышеупомянутое верно для браузеров с помощью v8 механизм (хром/хром и т.д.).
С Firefox (механизм SpiderMonkey) результаты полностью отличающиеся
Проверка сами!! Firefox с третьим решением, кажется,
больше чем в 4.5 раза быстрее, чем Chrome с первым решением... сумасшедшим :D
function log(data) {
document.getElementById("log").textContent += data + "\n";
}
benchmark = (() => {
time_function = function(ms, f, num) {
var z;
var t = new Date().getTime();
for (z = 0;
((new Date().getTime() - t) < ms); z++) f(num);
return (z / ms)
} // returns how many times the function was run in "ms" milliseconds.
function benchmark() {
function compare(a, b) {
if (a[1] > b[1]) {
return -1;
}
if (a[1] < b[1]) {
return 1;
}
return 0;
}
// functions
function replace1(s) {
s.replace(/foo/g, "bar")
}
String.prototype.replaceAll2 = function(_f, _r){
var o = this.toString();
var r = '';
var s = o;
var b = 0;
var e = -1;
// if(_c){ _f = _f.toLowerCase(); s = o.toLowerCase(); }
while((e=s.indexOf(_f)) > -1)
{
r += o.substring(b, b+e) + _r;
s = s.substring(e+_f.length, s.length);
b += e+_f.length;
}
// Add Leftover
if(s.length>0){ r+=o.substring(o.length-s.length, o.length); }
// Return New String
return r;
};
String.prototype.replaceAll = function(str1, str2, ignore) {
return this.replace(new RegExp(str1.replace(/([\/\,\!\\\^\$\{\}\[\]\(\)\.\*\+\?\|\<\>\-\&])/g, "\\[110]amp;"), (ignore ? "gi" : "g")), (typeof(str2) == "string") ? str2.replace(/\$/g, "$$") : str2);
}
function replace2(s) {
s.replaceAll("foo", "bar")
}
function replace3(s) {
s.split('foo').join('bar');
}
function replace4(s) {
s.replaceAll2("foo", "bar")
}
funcs = [
[replace1, 0],
[replace2, 0],
[replace3, 0],
[replace4, 0]
];
funcs.forEach((ff) => {
console.log("Benchmarking: " + ff[0].name);
ff[1] = time_function(2500, ff[0], "foOfoobarBaR barbarfoobarf00".repeat(10));
console.log("Score: " + ff[1]);
})
return funcs.sort(compare);
}
return benchmark;
})()
log("Starting benchmark...\n");
res = benchmark();
console.log("Winner: " + res[0][0].name + " !!!");
count = 1;
res.forEach((r) => {
log((count++) + ". " + r[0].name + " score: " + Math.floor(10000 * r[1] / res[0][1]) / 100 + ((count == 2) ? "% *winner*" : "% speed of winner.") + " (" + Math.round(r[1] * 100) / 100 + ")");
});
log("\nWinner code:\n");
log(res[0][0].toString());
<textarea rows="50" cols="80" style="font-size: 16; resize:none; border: none;" id="log"></textarea>
, тест будет работать в течение многих 10-х (+2s), поскольку Вы нажимаете кнопку.
Мои результаты (на том же ПК):
Chrome/Linux Ubuntu 64:
1. replace1 score: 100% *winner* (766.18)
2. replace4 score: 99.07% speed of winner. (759.11)
3. replace3 score: 68.36% speed of winner. (523.83)
4. replace2 score: 59.35% speed of winner. (454.78)
Firefox/Linux Ubuntu 64
1. replace3 score: 100% *winner* (3480.1)
2. replace1 score: 13.06% speed of winner. (454.83)
3. replace4 score: 9.4% speed of winner. (327.42)
4. replace2 score: 4.81% speed of winner. (167.46)
Хорошая путаница мм?
Брал на себя смелость добавления большего количества результатов испытаний
Chrome/Windows 10
1. replace1 score: 100% *winner* (742.49)
2. replace4 score: 85.58% speed of winner. (635.44)
3. replace2 score: 54.42% speed of winner. (404.08)
4. replace3 score: 50.06% speed of winner. (371.73)
Firefox/Windows 10
1. replace3 score: 100% *winner* (2645.18)
2. replace1 score: 30.77% speed of winner. (814.18)
3. replace4 score: 22.3% speed of winner. (589.97)
4. replace2 score: 12.51% speed of winner. (331.13)
Edge/Windows 10
1. replace1 score: 100% *winner* (1251.24)
2. replace2 score: 46.63% speed of winner. (583.47)
3. replace3 score: 44.42% speed of winner. (555.92)
4. replace4 score: 20% speed of winner. (250.28)
Chrome на Galaxy Note 4
1. replace4 score: 100% *winner* (99.82)
2. replace1 score: 91.04% speed of winner. (90.88)
3. replace3 score: 70.27% speed of winner. (70.15)
4. replace2 score: 38.25% speed of winner. (38.18)
Что самое быстрее, я не знаю, но я знаю, что самое читаемое - это то, что самое кратчайшее и простые. Даже если это немного медленнее, чем другое решение, это стоит использовать.
Итак, используйте:
"string".replace("a", "b");
"string".replace(/abc?/g, "def");
и наслаждайтесь хорошим кодом, а не быстрее (ну ... 1/100000 сек. Это не разница) и уродливый. ;)
var mystring = 'This is a string';
var newString = mystring.replace(/i/g, "a");
NewString ныне сейчас «Тас как стран»
Используйте метод заменить ()
строки
объекта.
Как уже упоминалось в выбранном ответе, флаг / г должен использоваться в Regex, чтобы заменить всех экземпляров подстроки в строке.