我正在尝试接受用户输入并对其进行修改,以便在没有任何元音的情况下打印字符串。我已经能够使用以下代码成功完成此操作。
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
输入单词后程序停止。
答案 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);