Если вы используете Java или JavaScript, есть ли хороший способ сделать что-то вроде вычитания String, чтобы получить две строки:
org.company.project.component
org.company.project.component.sub_component
вы просто получите:
sub_component
Я знаю, что могу просто написать код для обхода строки, сравнивая символы, но я надеялся, что есть способ сделать это действительно компактным способом.
Другой вариант использования - найти разницу между строками:
org.company.project.component.diff
org.company.project.component.sub_component
На самом деле я хочу удалить только идентичные разделы.
Как это не так? Вам никогда не нужно удалять строку из другой строки в javascript? Конечно, все решения были опубликованы на java, но это не отменяет вопрос.
LOL - хорошо, давайте отметим это как Java / JavaScript / C# / VB.NET / Python / Ruby / erlang / Smalltalk / Lisp / и т. д. Я хочу сказать, что у JavaScript и Java нет ничего общего, кроме общего синтаксиса. с C#, C, C++ и т. д., и это не совсем решение для JavaScript.




String result = "org.company.project.component.sub_component".replace("org.company.project.component","")
Должно сработать...
Обновлено: библиотеки общего пользования Apache также отлично подходят для использования
Как отмечено ниже, у класса StringUtils действительно есть метод для этого: StringUtils.remove ()
Разве вы не можете просто заменить вхождения первой строки во второй пустой строкой?
Зависит от точно, что вы хотите. Если вы ищете способ сравнения строк в общем случае, то есть нахождение общих подстрок между произвольными входами, то вы ищете что-то более близкое к расстоянию Левенштейна и аналогичные алгоритмы. Однако, если все, что вам нужно, это сравнение префикса / суффикса, это должно сработать:
public static String sub(String a, String b) {
if (b.startsWith(a)) {
return b.subString(a.length());
}
if (b.endsWith(a)) {
return b.subString(0, b.length() - a.length());
}
return "";
}
... или что-то в этом роде.
Спасибо Крису и Дэниелу (и всем остальным). Это было потрясающе быстро.
Кажется, что это слишком много кода для того, что запрашивается - подход Эриксона (заменить строку B в строке A пустой строкой) намного проще и удобочитаем.
@Herb Согласен, мне гораздо больше нравится подход Эриксона (и Криса) к удобочитаемости. Однако он не требует строгого префикса / суффикса. Проблема, с которой я столкнулся, заключается в том, что вопрос немного нечетко сформулирован: что на самом деле означает разница в строках?
Если вы просто пытаетесь получить то, что стоит после последней точки, я считаю этот метод простым в Javascript:
var baseString = "org.company.project.component.sub_component";
var splitString = baseString.split(".");
var subString = splitString[splitString.length - 1];
subString будет содержать искомое значение.
На первый взгляд я подумал о RegExp, но, добавив к вопросу, вы устранили эту возможность, добавив в начальную строку ...
Итак, вам нужно будет создать процедуру, которая берет каждый равный символ из результирующей строки, примерно так:
<script type = "text/javascript">
var a = "org.company.project.component.diff";
var b = "org.company.project.component.sub_component";
var i = 0;
while(a.charAt(i) == b.charAt(i)){
i++;
}
alert(b.substring(i));
</script>
Кстати, не имеет смысла устанавливать Java и javascript как равные в любом контексте, популярным способом выражения может быть:
Java и javascript имеют четыре общих черты: j - a - v - a! -)
function sub(a, b) {
return [a, b].join('\x01').match(/^([^\x01]*)[^\x01]*\x01(.*)/)[2];
}
Хотя это зависит от того, что символ с кодом 1 не появляется ни в одной из этих строк.
Это решение для Javascript-конца вопроса:
String.prototype.contracat = function(string){
var thing = this.valueOf();
for(var i=0; i<string.length;i++){
thing=thing.replace(string.charAt(i),"");
}
return thing
};
Я не понимаю, насколько здесь уместен JavaScript ...