JavaScript или Java вычитание строк - PullRequest
0 голосов
/ 24 сентября 2008

Если вы используете Java или JavaScript, есть ли хороший способ сделать что-то вроде вычитания строки, чтобы получить две строки:

org.company.project.component
org.company.project.component.sub_component

вы просто получаете:

sub_component

Я знаю, что мог бы просто написать код для обхода строк, сравнивающих символы, но я надеялся, что был способ сделать это действительно компактным способом.

Другой вариант использования - найти разницу между строками:

org.company.project.component.diff
org.company.project.component.sub_component

На самом деле я хочу удалить только идентичные разделы.

Ответы [ 7 ]

7 голосов
/ 24 сентября 2008

Зависит от точно что вы хотите. Если вы ищете способ сравнения строк в общем случае - то есть поиска общих подстрок между произвольными входами - тогда вы смотрите на что-то ближе к расстоянию Левенштейна и аналогичным алгоритмам. Однако, если вам нужно только сравнение префиксов / суффиксов, это должно сработать:

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 "";
}

... или что-то в этом роде.

6 голосов
/ 24 сентября 2008
String result = "org.company.project.component.sub_component".replace("org.company.project.component","")

Должно работать ...

РЕДАКТИРОВАТЬ: библиотеки Apache commons также отлично подходят для использования

Как отмечено ниже, класс StringUtils действительно имеет метод для этого: StringUtils.remove ()

3 голосов
/ 29 сентября 2008

На первый взгляд, я подумал о 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! -)

0 голосов
/ 13 января 2016

Это решение для конца вопроса 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
};
0 голосов
/ 29 сентября 2008
function sub(a, b) {
  return [a, b].join('\x01').match(/^([^\x01]*)[^\x01]*\x01\1(.*)/)[2];
}

Хотя это зависит от того, что символ с кодом 1 не появляется ни в одной из этих строк.

0 голосов
/ 25 сентября 2008

Если вы просто пытаетесь получить что-то после последней точки, я нахожу этот метод простым в Javascript:

var baseString = "org.company.project.component.sub_component";
var splitString = baseString.split(".");
var subString = splitString[splitString.length - 1];

subString будет содержать значение, которое вы ищете.

0 голосов
/ 24 сентября 2008

Разве вы не можете просто заменить вхождения первой строки во второй пустой строкой?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...