Java 创建两个长度相同的字符串,一个复制另一个';s结构,同时反复循环相同的字母
我有一个任意字符串Java 创建两个长度相同的字符串,一个复制另一个';s结构,同时反复循环相同的字母,java,Java,我有一个任意字符串“你好,我的名字是蒂莫西”和另一个任意的“关键字”字符串“ham”。我想创建一个方法,通过一遍又一遍地重复其字符,同时保留空格,使第二个字符串与第一个字符串长度相同,结构相同。结果将是:“hamha mh amha mh amhamha。以下是我目前的代码: public String makeStringsEqual(String str, String keyword) { if (str.length() > keyword.length())
“你好,我的名字是蒂莫西”
和另一个任意的“关键字”字符串“ham”
。我想创建一个方法,通过一遍又一遍地重复其字符,同时保留空格,使第二个字符串与第一个字符串长度相同,结构相同。结果将是:“hamha mh amha mh amhamha
。以下是我目前的代码:
public String makeStringsEqual(String str, String keyword)
{
if (str.length() > keyword.length())
{
for(int i = 0; i < str.length(); i++)
{
if (str.charAt(i) != ' ')
{
keyword += keyword.charAt(i);
}
else
keyword += " ";
}
}
return keyword;
}
公共字符串makeStringsEqual(字符串str,字符串关键字)
{
if(str.length()>关键字.length())
{
对于(int i=0;i
上一个示例中的代码返回
hamha-ha
。我如何解决此问题?我将给您一些提示,但不是答案。这似乎是一个学习课程,因此您应该首先自己尝试
关键字
,因此会对其进行更改。这不好。此外,您正在生成字符串。请转到并阅读有关类StringBuilder的信息for
循环很好,因为你必须在整个输入字符串上循环(这里是str
),否则你就得不到它的结构。其他一切都发生在这个循环中您能用这些提示修复您的方法吗?首先,不要使用
关键字+=(字符串)
,使用StringBuilder
更快
public static String makeStringEqual(String str, String keyword) {
StringBuilder sb = new StringBuilder("");
if (str.length() > keyword.length()) {
int j = 0; // this tells you what is the current index for the keyword
for(int i=0;i<str.length();i++) {
if (str.charAt(i) == ' ') {
sb.append(' ');
} else {
sb.append(keyword.charAt(j));
// when you use up a keyword's character, move on to the next char
j++;
// make sure to loop back to the start when you're at the end
j %= keyword.length();
}
}
}
return sb.toString();
}
公共静态字符串makeStringEqual(字符串str,字符串关键字){
StringBuilder sb=新的StringBuilder(“”);
if(str.length()>关键字.length()){
int j=0;//这告诉您关键字的当前索引是什么
对于(inti=0;i您的程序应该是这样的
public class Ham {
public static String makeStringsEqual(String str, String keyword) {
String ret = "";
int spaces = 0;
if (str.length() > keyword.length()) {
for(int i = 0; i < str.length(); i++) {
if (str.charAt(i) != ' ') {
ret += keyword.charAt((i - spaces) % keyword.length());
} else {
spaces++;
ret += " ";
}
}
}
return ret;
}
public static void main(String[] args) {
System.out.println(makeStringsEqual("hello my name is timothy", "ham"));
}
}
公共类Ham{
公共静态字符串makeStringsEqual(字符串str,字符串关键字){
字符串ret=“”;
int空间=0;
if(str.length()>关键字.length()){
对于(int i=0;i
如果您不了解此处的%是如何使用的,则可以使用另一个版本(更简单:)
公共类Ham2{
公共静态字符串makeStringsEqual(字符串str,字符串关键字){
字符串ret=“”;
int ci=0;//关键字中的当前字母索引
if(str.length()>关键字.length()){
对于(int i=0;i
String str=“你好,我叫蒂莫西”;
字符串关键字=“ham”;
字符串结果=”;
int i=0;
int j=0;
而(i=关键字.length())j=0;
i++;
}
系统输出打印项次(结果);
将打印“hamha mh amha mh amhamha”您的代码中需要一个类似“循环迭代器”的逻辑来处理关键字。因此,我使用自己的索引和模运算符来确保当关键字结束时,它将从头开始
public static String makeStringsEqual(String str, String keyword) {
StringBuilder equalStringBuilder = new StringBuilder();
if (str.length() > keyword.length()) {
int keywordIndex = 0;
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) != ' ') {
equalStringBuilder.append(keyword.charAt(keywordIndex++));
keywordIndex %= keyword.length();
} else {
equalStringBuilder.append(' ');
}
}
}
return equalStringBuilder.toString();
}
public静态字符串makeStringsEqual(字符串str,字符串关键字){
StringBuilder equalStringBuilder=新StringBuilder();
if(str.length()>关键字.length()){
int关键字索引=0;
对于(int i=0;i
问题在于,您只需在字符串“ham”中添加更多文本。这意味着,当您从“str”中的索引0开始时,“keyword”中的第一个字符将位于索引str.length,在本例中为3
如果使用新的字符串变量,将从索引0开始。但是,当您尝试访问“str”的索引i时,请注意indexoutofboundsexception,您必须使用模数来避免:
public String makeStringsEqual(String str, String keyword)
{
if (str.length() > keyword.length())
{
string result = "";
for(int i = 0; i < str.length(); i++)
{
if (str.charAt(i) != ' ')
{
result += keyword.charAt(i % keyword.length());
}
else
result += " ";
}
}
return result;
}
公共字符串makeStringsEqual(字符串str,字符串关键字)
{
if(str.length()>关键字.length())
{
字符串结果=”;
对于(int i=0;i
O/p:carlc arlc arlc
适用于任何I/p.:)仅在实践中,我尽可能使用Stream
s做了一个Java-8
我欢迎提出意见/改进
public void test() {
// My string.
String s = "Hello! My name is Timothy.";
// The key loops around the string "ham"
Iterator<Integer> k = Loop.of("ham", s.length());
System.out.println(s);
String result = s.codePoints()
.map(c -> c == ' ' ? ' ' : k.next())
.collect(StringBuilder::new,
StringBuilder::appendCodePoint,
StringBuilder::append)
.toString();
System.out.println(result);
}
static class Loop<T> implements Iterator<T> {
// Where we are in the array.
int i = 0;
// The length to loop to.
final int length;
// The array to feed.
final List<T> a;
public Loop(List<T> a, int length) {
this.a = a;
this.length = length;
}
// Factories.
private static Iterator<Integer> of(String s, int length) {
List<Integer> a = new ArrayList(s.length());
for (int i = 0; i < s.length(); i++) {
a.add(s.codePointAt(i));
}
return new Loop(a, length);
}
@Override
public boolean hasNext() {
return i < length;
}
@Override
public T next() {
return a.get((i++) % a.size());
}
}
使用另一个字符串变量instea
public String makeStringsEqual(String str, String keyword)
{
if (str.length() > keyword.length())
{
string result = "";
for(int i = 0; i < str.length(); i++)
{
if (str.charAt(i) != ' ')
{
result += keyword.charAt(i % keyword.length());
}
else
result += " ";
}
}
return result;
}
public static void main (String args[]){
String s1="hello my name is timothy";
String s2="ham";
List al = new ArrayList();
String s3="";
int k=0;
for(int i=0;i<s1.length();i++)
{ if(k==s2.length())
{
k=0;
}
if(s1.charAt(i)==' ')
{ s3=s3+" ";
continue;
}
else
{
s3=s3+s2.charAt(k++);
}
}
System.out.println(s3);
}
s1="Hello Aunt Mary";
String s2="carl";
public void test() {
// My string.
String s = "Hello! My name is Timothy.";
// The key loops around the string "ham"
Iterator<Integer> k = Loop.of("ham", s.length());
System.out.println(s);
String result = s.codePoints()
.map(c -> c == ' ' ? ' ' : k.next())
.collect(StringBuilder::new,
StringBuilder::appendCodePoint,
StringBuilder::append)
.toString();
System.out.println(result);
}
static class Loop<T> implements Iterator<T> {
// Where we are in the array.
int i = 0;
// The length to loop to.
final int length;
// The array to feed.
final List<T> a;
public Loop(List<T> a, int length) {
this.a = a;
this.length = length;
}
// Factories.
private static Iterator<Integer> of(String s, int length) {
List<Integer> a = new ArrayList(s.length());
for (int i = 0; i < s.length(); i++) {
a.add(s.codePointAt(i));
}
return new Loop(a, length);
}
@Override
public boolean hasNext() {
return i < length;
}
@Override
public T next() {
return a.get((i++) % a.size());
}
}
Hello! My name is Timothy.
hamham ha mham ha mhamhamh