Вычитание строк в JavaScript или Java

Если вы используете 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 ...

Jason Bunting 25.09.2008 00:17

Как это не так? Вам никогда не нужно удалять строку из другой строки в javascript? Конечно, все решения были опубликованы на java, но это не отменяет вопрос.

Chris Marasti-Georg 25.09.2008 00:21

LOL - хорошо, давайте отметим это как Java / JavaScript / C# / VB.NET / Python / Ruby / erlang / Smalltalk / Lisp / ‌ и т. д. Я хочу сказать, что у JavaScript и Java нет ничего общего, кроме общего синтаксиса. с C#, C, C++ и т. д., и это не совсем решение для JavaScript.

Jason Bunting 25.09.2008 02:23
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
7 376
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

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

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

Спасибо Крису и Дэниелу (и всем остальным). Это было потрясающе быстро.

Scott Rosenbaum 25.09.2008 00:04

Кажется, что это слишком много кода для того, что запрашивается - подход Эриксона (заменить строку B в строке A пустой строкой) намного проще и удобочитаем.

Herb Caudill 25.09.2008 00:29

@Herb Согласен, мне гораздо больше нравится подход Эриксона (и Криса) к удобочитаемости. Однако он не требует строгого префикса / суффикса. Проблема, с которой я столкнулся, заключается в том, что вопрос немного нечетко сформулирован: что на самом деле означает разница в строках?

Daniel Spiewak 25.09.2008 00:49

Если вы просто пытаетесь получить то, что стоит после последней точки, я считаю этот метод простым в 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
};

Другие вопросы по теме