Подтвердить что ты не робот

Проверьте, заканчивается ли строка с определенным шаблоном

Если у меня есть строка вроде:

This.is.a.great.place.too.work.

или

This/is/a/great/place/too/work/

чем моя программа должна дать мне, что предложение действительно, и оно имеет "работу".

Если у меня:

This.is.a.great.place.too.work.hahahha

или

This/is/a/great/place/too/work/hahahah

то моя программа не должна давать мне, что в предложении есть "работа".

Итак, я смотрю на строки java, чтобы найти слово в конце сообщения, имеющего., или, или/перед ним. Как я могу это достичь?

4b9b3361

Ответ 1

Это действительно просто, String объект имеет endsWith метод.

Из вашего вопроса кажется, что вы хотите либо /, ,, либо . как набор разделителей.

Итак:

String str = "This.is.a.great.place.to.work.";

if (str.endsWith(".work.") || str.endsWith("/work/") || str.endsWith(",work,"))
     // ... 

Вы также можете сделать это с помощью метода matches и довольно простого регулярного выражения:

if (str.matches(".*([.,/])work\\1$"))

Используя класс символов [.,/], определяющий либо период, либо косую черту, либо запятую, и обратную ссылку, \1, которая соответствует тому, что из альтернатив было найдено, если оно есть.

Ответ 2

Вы можете проверить, заканчивается ли строка с работой, за которой следует один символ:

theString.matches(".*work.$");

Если конечный символ необязательный, вы можете использовать это:

theString.matches(".*work.?$");

Чтобы последний символ был периодом . или косой чертой /, вы можете использовать это:

theString.matches(".*work[./]$");

Чтобы проверить работу, за которой следует необязательный период или слэш, вы можете использовать это:

theString.matches(".*work[./]?$");

Чтобы проверить работу в окружении по периодам или, вы можете сделать это:

theString.matches(".*[./]work[./]$");

Если токены до и после работают должны соответствовать друг другу, вы можете сделать это:

theString.matches(".*([./])work\\1$");

Ваше точное требование точно не определено, но я думаю, что это будет примерно так:

theString.matches(".*work[,./]?$");

Другими словами:

  • ноль или более символов
  • а затем работа
  • за которым следует ноль или один , . ИЛИ /
  • за которым следует конец ввода

Объяснение различных элементов регулярного выражения:

.               --  any character
*               --  zero or more of the preceeding expression
$               --  the end of the line/input
?               --  zero or one of the preceeding expression
[./,]           --  either a period or a slash or a comma
[abc]           --  matches a, b, or c
[abc]*          --  zero or more of (a, b, or c)
[abc]?          --  zero or one of (a, b, or c)

enclosing a pattern in parentheses is called "grouping"

([abc])blah\\1  --  a, b, or c followed by blah followed by "the first group"

Здесь тестовый жгут для игры:

class TestStuff {

    public static void main (String[] args) {

        String[] testStrings = { 
                "work.",
                "work-",
                "workp",
                "/foo/work.",
                "/bar/work",
                "baz/work.",
                "baz.funk.work.",
                "funk.work",
                "jazz/junk/foo/work.",
                "funk/punk/work/",
                "/funk/foo/bar/work",
                "/funk/foo/bar/work/",
                ".funk.foo.bar.work.",
                ".funk.foo.bar.work",
                "goo/balls/work/",
                "goo/balls/work/funk"
        };

        for (String t : testStrings) {
            print("word: " + t + "  --->  " + matchesIt(t));
        }
    }

    public static boolean matchesIt(String s) {
        return s.matches(".*([./,])work\\1?$");
    }

    public static void print(Object o) {
        String s = (o == null) ? "null" : o.toString();
        System.out.println(o);
    }

}

Ответ 3

Конечно, вы можете использовать класс StringTokenizer, чтобы разделить String на '.' или '/', и проверьте, работает ли последнее слово.

Ответ 4

Вы можете использовать метод подстроки:

   String aString = "This.is.a.great.place.too.work.";
   String aSubstring = "work";
   String endString = aString.substring(aString.length() - 
        (aSubstring.length() + 1),aString.length() - 1);
   if ( endString.equals(aSubstring) )
       System.out.println("Equal " + aString + " " + aSubstring);
   else
       System.out.println("NOT equal " + aString + " " + aSubstring);

Ответ 5

Вы можете использовать endsWith, чтобы решить эту проблему.

Прежде всего, мы попробуем простой пример с помощью метода endswith

public class Test {

  public static void main(String args[]) {
     String Str = new String("This is really not immutable");

     retVal = Str.endsWith( "immutable" );
     System.out.println("Returned Value = " + retVal );
  }
}

Последнее значение Str является "неизменным". Затем вы можете увидеть true в консоли. Согласно вашему вопросу,

public class Test {

   public static void main(String args[]) {
     String Str = new String("This/is/a/great/place/too/work/hahahah");
     boolean retVal;

     retVal = Str.endsWith( "work/hahahah" );
     System.out.println("Returned Value = " + retVal );

    if(retVal == true){
      System.out.println("Its work");
    }
 }

}