使用循环打印没有元音的UI没有replaceAll();在爪哇

时间:2016-09-27 03:56:36

标签: java string loops

我正在尝试接受用户输入并对其进行修改,以便在没有任何元音的情况下打印字符串。我已经能够使用以下代码成功完成此操作。

Scanner in = new Scanner(System.in);
    System.out.println("Enter a word: ");
    String word = in.next();

    String newString = word.replaceAll("[aeiouAEIOU]","1");
    System.out.printf("%s", newString);

但是,我试图通过使用没有上述方法的循环来获得相同的效果,replaceAll()。我已经尝试了另一次,但在逻辑中混淆并重新启动。我最近的尝试在下面,我无法理解为什么它不能正常运行。我将输入一个字符串,没有任何错误消息,它将不会打印任何内容。我唯一能让它工作的时候是我用字符串

来查找单个字符
if(letter.contains("a"))

如果发现条件为true,它将打印出一串字符串,但是,这不适用于任何字符组合,只能用于单个字符组合。我的完整代码如下。

import java.util.Scanner;

public class practice
{
  public static void main(String[] args)
  {
   Scanner in = new Scanner(System.in);
   System.out.println("Enter a word: ");
   String word = in.next();
   int i = 0;

   while (i < word.length()){
       String letter = word.substring(i, (i+1));
       if(letter.contains("[bcdfghjklmnpqrstvwxyz]")){
           System.out.printf("%s",letter);
       }
       i++;
   }
  }
}

我只是试图找到一种方法来完成这个程序只使用条件,循环,UI,只有方法length(),contains()或indexOf(),charAt()和substring(x,y) 。提前感谢您的帮助,我希望我已经提供了足够的信息。

以下是一些示例输出:

Enter a word: 
Jordan

输入单词后程序停止。

4 个答案:

答案 0 :(得分:1)

一种方法是将字符串转换为字符数组toCharArray(),然后与案例进行比较并添加新的链StringBuilder

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes" 
    xmlns:conv="clr-namespace:MaterialDesignThemes.Wpf.Converters;assembly=MaterialDesignThemes.Wpf"
    xmlns:local="clr-namespace:WpfApplication1"
    x:Class="WpfApplication1.MainWindow"
    mc:Ignorable="d"
    Title="MainWindow" Height="300" Width="300">
<Window.Resources>


    <Style x:Key="CardStyle1" TargetType="{x:Type materialDesign:Card}">
        <Setter Property="Background" Value="#2fff0000"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type materialDesign:Card}">
                    <Grid Margin="{TemplateBinding Margin}" Background="Transparent">
                        <AdornerDecorator>
                            <AdornerDecorator.CacheMode>
                                <BitmapCache EnableClearType="True" SnapsToDevicePixels="True"/>
                            </AdornerDecorator.CacheMode>
                            <Border Effect="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(materialDesign:ShadowAssist.ShadowDepth), Converter={x:Static conv:ShadowConverter.Instance}}"
                    CornerRadius="{TemplateBinding UniformCornerRadius}">
                                <Border Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}" 
                        x:Name="PART_ClipBorder"
                        Clip="{TemplateBinding ContentClip}" />
                            </Border>
                        </AdornerDecorator>
                        <ContentPresenter 
            x:Name="ContentPresenter"                    
            Margin="{TemplateBinding Padding}"
            Clip="{TemplateBinding ContentClip}"
            Content="{TemplateBinding ContentControl.Content}" 
            ContentTemplate="{TemplateBinding ContentControl.ContentTemplate}" 
            ContentTemplateSelector="{TemplateBinding ContentControl.ContentTemplateSelector}" 
            ContentStringFormat="{TemplateBinding ContentControl.ContentStringFormat}">
                        </ContentPresenter>
                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter TargetName="PART_ClipBorder" Property="Background" Value="#4fff0000" />
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

</Window.Resources>
<Grid>

    <materialDesign:Card Style="{DynamicResource CardStyle1}" 
                         Content="My Sample Card" 
                         HorizontalAlignment="Center" 
                         Margin="0" 
                         VerticalAlignment="Center" 
                         Width="100" 
                         Height="100" />

</Grid>
您的代码中的

可能会更改为什么带有子字符串的选定字符永远不会包含像 String word = in.next(); StringBuilder bul = new StringBuilder(); for (char arg : word.toLowerCase().toCharArray()) { switch(arg) { case 'a': System.out.println("A");break; case 'e': System.out.println("E");break; case 'i': System.out.println("I");break; case 'o': System.out.println("O");break; case 'u': System.out.println("U");break; default: bul.append(arg); } } System.out.println(bul); //String not Vowels 这样的长字符串

"[bcdfghjklmnpqrstvwxyz]"

if(letter.contains("[bcdfghjklmnpqrstvwxyz]")){...}

答案 1 :(得分:0)

您可以将Scanner.useDelimeter(Pattern pattern)regex一起使用。删除元音的regex是 - [^ aeiou] +

如果您想忽略大小写,请使用此模式 - (?i)[^ aeiou] +

最后尝试以下代码段 -

scanner.useDelimeter(Pattern.compile("[^aeiou]+"));

答案 2 :(得分:0)

当你说,

 $(document).ready(function() {

        $(function(){
            var current = location.pathname;
            $('#wa li a').each(function(){
                var $this = $(this);
                // if the current path is like this link, make it active
                if($this.attr('href').indexOf(current) !== -1){
                    $this.addClass('active');
                }
            })
        })
   });

您的代码会检查if(letter.contains("bcdfghjklmnpqrstvwxyz")) 是否具有确切的字母序列letter

换句话说,它不会检查bcdfghjklmnpqrstvwxyz中是否存在任何这些字母。

相反,你可以这样:

String

答案 3 :(得分:0)

其他做法是

Scanner s = new Scanner(System.in);
System.out.print("Enter input String");
String input = s.next();
StringBuilder sb = new StringBuilder("");

for(char c : input.toLowerCase().toCharArray())
  if( c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u' ){}
  else  sb.append(c+"");'

System.out.println("Given input without vowels : "+sb);